【问题标题】:Find method name which opened new window (c# wpf)查找打开新窗口的方法名称(c# wpf)
【发布时间】:2014-06-11 13:03:11
【问题描述】:

我正在尝试找到一种方法来获取弹出一个新窗口的方法调用的字符串名称。我有三个按钮单击事件处理程序,它们将打开新窗口,但我需要知道哪个调用了 .Show();

    private void buttonSettingsPortfolio1_Click(object sender, RoutedEventArgs e)
    {
        var settingsWindow = new MobilityPortfolioSettings();
        settingsWindow.Show();
    }

    private void buttonSettingsPortfolio2_Click(object sender, RoutedEventArgs e)
    {
        var settingsWindow = new MobilityPortfolioSettings();
        settingsWindow.Show();
    }

    private void buttonSettingsPortfolio3_Click(object sender, RoutedEventArgs e)
    {
        var settingsWindow = new MobilityPortfolioSettings();
        settingsWindow.Show();
    }

我不想拥有三个单独的窗口!是否有一个打开事件处理程序参数,我可以从中获取调用者?

【问题讨论】:

  • 如果 3 个按钮上的代码相同,为什么要保留所有 3 个而不是 1 个?
  • 我需要知道按钮是从哪个网格位置单击的。窗口将根据特定按钮以不同方式运行
  • @MarkCorrigan 可以轻松获取触发事件的网格,在事件的sender参数中。

标签: c# wpf events event-handling window


【解决方案1】:

好吧,您可以简单地在 MobilityPortfolioSettings 类中添加一个公共变量并在每个方法中设置其值,例如:在 buttonSettingsPortfolio1_Click 添加 MobilityPortfolioSettings.Variable = 1 等等。

【讨论】:

  • 啊,好吧,我在想这个,但我随后在我的视图模型中执行所有逻辑,但我想我可以只为 vm 的构造函数提供该公共字段。现在似乎很明显,感谢 push1
【解决方案2】:

这里 Console.write(triggeredBy); 您可以通过记录到文件或其他方式输出值。此值将指示您的代码采用的路径。

private void buttonSettingsPortfolio1_Click(object sender, RoutedEventArgs e)
    {
        Open("buttonSettingsPortfolio1_Click");
    }

    private void buttonSettingsPortfolio2_Click(object sender, RoutedEventArgs e)
    {
        Open("buttonSettingsPortfolio2_Click");
    }

    private void buttonSettingsPortfolio3_Click(object sender, RoutedEventArgs e)
    {
       Open("buttonSettingsPortfolio3_Click");
    }

    private Open(string triggeredBy){
        Console.write(triggeredBy); // You can write to file or output in some different way here.
        var settingsWindow = new MobilityPortfolioSettings();
        settingsWindow.Show();
}

【讨论】:

  • 所以我需要在打开的窗口中使用按下的按钮作为整数
【解决方案3】:

试试这个:

  1. 将发件人转换为按钮,然后获取其名称。
  2. 更改 MobilityPortfolioSettings 构造函数,使其需要一个字符串参数。
  3. 将按钮名称传递给构造函数。

    private void buttonSettingsPortfolio1_Click(object sender, RoutedEventArgs e)
    {
        string buttonName = "";
        if (sender is Button)
            buttonName = ((Button)sender).Name;
    
        Window settingsWindow = new MobilityPortfolioSettings(buttonName);
        settingsWindow.Show();
    }
    

顺便说一句,使用 Window 作为变量类型而不是 var。

干杯

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-03-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-08
    • 1970-01-01
    相关资源
    最近更新 更多