2014-12-05 24 views
2

我一直在學習上我最近的項目C#和WPF和我所遇到的問題確定發件人一定的形式打開時。我有一個主窗體與綁定到對象列表的列表框。我用下面的代碼來處理用戶雙擊列表框中的行:確定第二個窗體打開時的發件人?

 <ListBox.ItemContainerStyle> 
      <Style TargetType="{x:Type ListBoxItem}" BasedOn="{StaticResource {x:Type ListBoxItem}}"> 
       <EventSetter Event="MouseDoubleClick" Handler="ListBoxItem_MouseDoubleClick"/> 
      </Style> 
     </ListBox.ItemContainerStyle> 

當我遇到了一個問題,就是我要推出第二個窗體(名爲「AddProject」),當用戶雙擊點擊,但我也從主窗體上啓動和按鈕相同的窗體。我需要確定哪個(雙擊或按鈕單擊)啓動了輔助表單,以便我可以適當地更改它。

在主要形式,我可以使用Window_loaded方法,並宣讀了發件人姓名,但是當我嘗試使用相同的次要形式,這是行不通的。這個工程的主要形式,而不是次要:

private void Window_Loaded(object sender, RoutedEventArgs e) 
    { 
     MessageBox.Show(sender.ToString()); 
    } 

當單擊該按鈕,下面的代碼運行打開AddProject形式:

private void btnAddProject_Click(object sender, RoutedEventArgs e) 
    { 
     AddProject frm = new AddProject(); 

     frm.ShowDialog(); 
    } 

我知道確定發件人是共同的問題遍佈堆棧溢出,但我無法找到一個好的答案,如何確定已經打開第二個表單的發件人。我想我可以在第二個窗體的window_load方法中運行它,但這似乎不起作用。任何幫助或鏈接到一個討論,回答我的問題,非常感謝!

+0

只是爲了澄清,你要訪問單擊項目在第二種形式?換句話說,來自第一個處理程序的'sender'變量? – BradleyDotNET 2014-12-05 22:57:47

+0

我需要確定發件人是誰,無論是雙擊或單擊按鈕,這樣我就可以隨後加載,這取決於是發送方在修改表格。 – 2014-12-05 23:43:52

回答

3

想必你有這樣的事情:

private void ListBoxItem_MouseDoubleClick(object sender, RoutedEventArgs e) 
{ 
    AddProject frm = new AddProject(); 

    frm.ShowDialog(); 
} 

當然你已經明確表示你有這樣的:

private void btnAddProject_Click(object sender, RoutedEventArgs e) 
{ 
    AddProject frm = new AddProject(); 

    frm.ShowDialog(); 
} 

爲什麼你就不能更改AddProject類的構造函數,並傳遞一個合適的標誌?就像這樣:

class AddProject 
{ 
    private bool _fromButton; 

    public AddProject(bool fromButton) 
    { 
     _fromButton = fromButton; 
     InitializeComponent(); 
    } 
} 

然後你的方法是這樣的:

private void ListBoxItem_MouseDoubleClick(object sender, RoutedEventArgs e) 
{ 
    AddProject frm = new AddProject(false); 

    frm.ShowDialog(); 
} 

private void btnAddProject_Click(object sender, RoutedEventArgs e) 
{ 
    AddProject frm = new AddProject(true); 

    frm.ShowDialog(); 
} 
+0

我認爲這將工作正常。我要測試它......我看到的一個限制是它只包含這兩個選項。如果我找到與其他呼叫打開該表單的理由,直接檢查發件人會使未來的選項更加開放。否則,我將不得不不斷修改構造函數以涵蓋我發現的任何新情況。我想這不是不合理的。 – 2014-12-05 23:42:05

+0

如果預計需要處理更多的場景,然後只需使用一個'enum',而不是這裏顯示的'bool'。您的輔助窗口實際上不應該對調用者有依賴關係。我只是因缺乏更好的名字而將變量'fromButton'命名。但是,無論是'bool'還是'enum','AddProject'類都應該使用值名稱來反映它在每種情況下應該執行的操作,而不是如何創建它。例如。該名稱應該反映對所需表單的修改,而不是爲什麼需要它們。 – 2014-12-05 23:53:06

+0

Ahhhh好吧,這是有道理的。 – 2014-12-06 00:03:53

相關問題