【问题标题】:How to deal with a second window如何处理第二个窗口
【发布时间】:2013-06-09 21:57:37
【问题描述】:

我有使用 ASP.Net MVC 设计网站的经验。

我希望现在能够处理 WPF。因此,我正在开发一个小型应用程序来学习线程、文件流等一些主题。

但是,我的问题似乎很基本:

我的主窗口上有一个按钮,可以触发调用另一个窗口的操作。新窗口的目标是获取 2 个字符串和 2 个双精度,将它们发送回主窗口。

我的问题是,主窗口不是那样启动的:

MainWindow m = new mainwindow;

我想做类似的事情:

m.someVariable = somethingFromMySecondWindow.

所以,我尝试将主窗口设置为静态,但出现很多错误,因此我删除了“静态”。 我无法从第二个窗口或任何公共方法访问变量。

我不知道是否需要,但这是我已经编写的c#代码。

主窗口:

namespace FlightPlanningDraft1
{
/// <summary>
/// Logique d'interaction pour MainWindow.xaml
/// </summary>
public partial class MainWindow : Window
{
    private string _ACModel;
    private string _ACIdentification;
    private double _ACFuelConsumption;
    private double _ACTotalFuel;


    public MainWindow()
    {
        InitializeComponent();
    }

    private void MenuItem_Click(object sender, RoutedEventArgs e)
    {
        ChargementAvion c = new ChargementAvion();
        c.Show();
    }

    public void Validation_Avion(string aCModel,string aCIdentification, double aCFuelConsumption, double aCTotalFuel)
    {
        _ACModel = aCModel;
        _ACIdentification = aCIdentification;
        _ACFuelConsumption = aCFuelConsumption;
        _ACTotalFuel = aCTotalFuel;
    }

}
}

我的第二个窗口

namespace FlightPlanningDraft1
{
/// <summary>
/// Logique d'interaction pour ChargementAvion.xaml
/// </summary>
public partial class ChargementAvion : Window
{

    public ChargementAvion()
    {
        InitializeComponent();
    }

    private void Button_Click(object sender, RoutedEventArgs e)
    {
        //I don't know what to do here.
    }


}
}

【问题讨论】:

    标签: c# wpf


    【解决方案1】:

    您可以将事件添加到第二个窗口。在MenuItem_Click (MainWindow) 中订阅它,然后从第二个窗口 (Button_Click) 触发该事件。

    您可以将任何值传递给您的事件。

    public partial class ChargementAvion :Window
    {
       public event Action<string> OnDone;
    
        private void Button_Click(object sender, RoutedEventArgs e)
        {
            if(OnDone != null)
            { 
               OnDone("any string you want to pass");
            }
        }
    }
    

    在主窗口中:

    private void MenuItem_Click(object sender, RoutedEventArgs e)
        {
            ChargementAvion c = new ChargementAvion();
            c.OnDone += ResultsHandler;
            c.Show();
        }
    
      public void ResultsHandler(string result)
      {
         //do what you want ;)
      }
    

    我建议你浏览一下this article。只是为了更熟悉 C# 中的事件和委托。

    【讨论】:

    • 那么,你的意思是使用类似的东西吗? msdn.microsoft.com/en-us/library/vstudio/dd990377.aspx如果是这样,那就是我愿意学习的下一个东西
    • 我更新了我的答案。你持有使用事件。您可以使用任何其他类来代替字符串。这只是一个例子。
    • 总结得非常好 ;-) 我正是需要这样的例子,谢谢 ;-)
    猜你喜欢
    • 2018-01-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多