我自己尝试编写上位机程序的时候遇到的一个问题就是,我在子窗口中设置好串口后,想把这个串口号更新到主窗口的UI上,但一直不成功,感觉是子窗口的传值失败导致的,就百度了相关的解决方案。有一个是创建主窗口的对象,通过对象点出来那个label的控件进行赋值,但这个方法失败了,我又参考别人的例子,尝试第二种方式,终于成功了,希望能对大家有所帮助。
/*新类————————————新类*/
//这是需要新建的类,事件响应
public class PassValuesEventArgs : EventArgs
{
public string Value { get; internal set; }
public PassValuesEventArgs(string Value)
{
this.Value = Value;
}
}
/*主窗口——————————主窗口*/
//这是主窗口的点击事件
private void ItemCOM_Click(object sender, RoutedEventArgs e)
{
pages.ItemCOM aw = new pages.ItemCOM();
//将主窗口设置为拥有者
aw.Owner = this;
//将AboutWindow的打开的初始位置设置为在Owner的中央
aw.WindowStartupLocation = WindowStartupLocation.CenterOwner;
aw.PassValuesEvent += new pages.ItemCOM.PassValuesHandler(ReceivedValues);
aw.ShowDialog();
}
private void ReceivedValues(object sender, PassValuesEventArgs e)
{
LabelCOM.Content = "串口:" + e.Value;
}
/*子窗口————————————子窗口*/
//用于传值
public delegate void PassValuesHandler(object sender, PassValuesEventArgs e);
public event PassValuesHandler PassValuesEvent;
//这是子窗口的确定按钮的点击事件
private void btnSure_Click(object sender, RoutedEventArgs e)
{
MainWindow mw = new MainWindow();
String strPortName = null;
if (comn.IsOpen == true)
{
strPortName = ComboBoxPortName.SelectedItem.ToString();
}
//将打开的串口号显示在主窗口中
PassValuesEventArgs args = new PassValuesEventArgs(strPortName);
PassValuesEvent(this, args);
this.Close();//关闭该窗口
}