using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using UtilityLibrary.WinControls;
using WeifenLuo.WinFormsUI.Docking;
using System.Threading;namespace LightCtrlApp
{
public partial class StateForm :DockContent
{
public StateForm()
{
InitializeComponent();
} public void SetLabelText(string[] infoArr)
{
this.label1.Text = infoArr[0];
this.label3.Text = infoArr[1];
this.label5.Text = infoArr[2];
this.label7.Text = infoArr[3];
}
}
}
label1_7的值都没有改变,其中infoArr调试过
(infoArr是另一个类传递过来的值,是通过委托和事件从另一个类传递给StateForm类下的这个方法SetLableText()),infoArr里面有值而且值是正确的,调试也有进到这个函数我就是不知道为什么label的值没有改变?
label1.refresh();
把label的size先弄的很大 看看。。
public event MyHandler MyEvent; private void QueryAccurate_Load(object sender, EventArgs e)
{
InitcmbArea();
initRoomDataView(); StateForm stateForm = new StateForm();
this.MyEvent += stateForm.SetLabelText;//注册方法
} private void cmbArea_SelectedIndexChanged(object sender, EventArgs e)
{
...................
string[] infoArr = new string[4];
infoArr[0] = AreaName;
infoArr[1] = CalculateLight.ToString();
infoArr[2] = LightOpenNum.ToString();
infoArr[3] = LightCloseNum.ToString(); if (MyEvent != null)
{
//如果有对象注册
MyEvent(infoArr);
}
}
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using UtilityLibrary.WinControls;
using WeifenLuo.WinFormsUI.Docking;
using System.Threading;namespace LightCtrlApp
{
public partial class StateForm :DockContent
{
public StateForm()
{
InitializeComponent();
} public void SetLabelText(string[] infoArr)
{
this.label1.Text = infoArr[0];
this.label3.Text = infoArr[1];
this.label5.Text = infoArr[2];
this.label7.Text = infoArr[3];
}
}
}
高手赶紧帮我看看!
private void QueryAccurate_Load(object sender, EventArgs e)
{
InitcmbArea();
initRoomDataView(); StateForm stateForm = new StateForm();
this.MyEvent += stateForm.SetLabelText;//注册方法
}
你把事件注册在了stateform的一个新实例上了。
你原来的窗体当然不会发生变化。
这样不行???
当然不行了。
private void QueryAccurate_Load(object sender, EventArgs e)
{
InitcmbArea();
initRoomDataView(); StateForm stateForm = new StateForm();
this.MyEvent += stateForm.SetLabelText;//注册方法
}
创建了一个新的StateForm实例,并且在新实例上注册了时间。
只是StateForm没有显示出来而已。
private void QueryAccurate_Load(object sender, EventArgs e)
{
InitcmbArea();
initRoomDataView(); StateForm stateForm = new StateForm();
this.MyEvent += stateForm.SetLabelText;//注册方法
stateForm.Show();//添加该行,试一下效果你就知道了。
}
其实stateForm这个窗体在程序一开始时就已经加载了。
我就是不想让它重新NEW然后重新SHOW
只想窗体创建一次!
private void QueryAccurate_Load(object sender, EventArgs e)
{
InitcmbArea();
initRoomDataView();StateForm stateForm = new StateForm();
this.MyEvent += stateForm.SetLabelText;//注册方法
stateForm.Show();//添加该行,试一下效果你就知道了。
}加上显示的代码。看看你是两个窗体:一个是QueryAccurate窗体,另一个是stateForm窗体
还是三个窗体:一个是QueryAccurate窗体,另两个是stateForm窗体
反正解决办法就是,想办法把stateForm的引用传递给QueryAccurate
然后在
private void QueryAccurate_Load(object sender, EventArgs e)
{
InitcmbArea();
initRoomDataView();//StateForm stateForm = new StateForm();
this.MyEvent += stateForm.SetLabelText;//注册方法
//stateForm.Show();//添加该行,试一下效果你就知道了。
}
此时的stateForm为传递的引用。
我又在第一段代码的基础上加了如下代码
前提是StateForm必须在QueryAccurate窗体创建之前创建
这样才能传递StateForm指针给QueryAccurate窗体
这样就实现了
StateForm stateForm = new StateForm();
public QueryAccurate(StateForm tmpForm)
{
InitializeComponent();
stateForm = tmpForm;
} public delegate void MyHandler(string[] param); //声明委托
public event MyHandler MyEvent; private void QueryAccurate_Load(object sender, EventArgs e)
{
InitcmbArea();
initRoomDataView(); this.MyEvent += stateForm.SetLabelText;//注册方法
} private void cmbArea_SelectedIndexChanged(object sender, EventArgs e)
{
...................
string[] infoArr = new string[4];
infoArr[0] = AreaName;
infoArr[1] = CalculateLight.ToString();
infoArr[2] = LightOpenNum.ToString();
infoArr[3] = LightCloseNum.ToString(); if (MyEvent != null)
{
//如果有对象注册
MyEvent(infoArr);
}
}