在第二个窗体打开时确定发件人

本文关键字:第二个 窗体 | 更新日期: 2023-09-27 18:33:15

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

单击该按钮时,将运行以下代码以打开"添加项目"窗体:

   private void btnAddProject_Click(object sender, RoutedEventArgs e)
   { 
       AddProject frm = new AddProject();
       frm.ShowDialog();
   }
我知道确定发件人

是堆栈溢出的常见问题,但是对于如何确定打开第二个表单的发件人,我找不到一个好的答案。 我想我可以在第二种形式的window_load方法中运行它,但这似乎不起作用。 非常感谢任何帮助或指向回答我问题的讨论的链接!

在第二个窗体打开时确定发件人

大概你有这样的东西:

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();
}