我在最近的一个项目中学习了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 :(得分: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();
}