关于vs2008 label控件!!!救命啊救命啊救命啊救命啊救命啊救命啊救命啊救命啊救命啊救命啊救命啊救命啊救命啊救命啊救命啊救命啊!!!! 本帖最后由 believe_miao 于 2011-12-20 19:39:37 编辑 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 直接传递参数不可以?在a项目数据变化的事件中修改b窗体中的label的name 在你的窗体A中实例化窗体B,就可以控制窗口B的控件了,当然Lable的name或者text你也就可以修改了。初学乍练,不知道是否正确,印象中老师讲过。 MainForm.csprivate MyDialog m_dlg; private void toolStripButton1_Click(object sender, EventArgs e) { using (MyDialog dlg = new MyDialog(richTextBox1.Text)) { if (dlg.ShowDialog() == DialogResult.OK) { richTextBox1.Text = dlg.TextBoxValue; } } } private void toolStripButton2_Click(object sender, EventArgs e) { if (m_dlg == null) { m_dlg = new MyDialog(richTextBox1.Text); m_dlg.TextBoxChanged += new EventHandler( (sender1, e1) => { richTextBox1.Text = m_dlg.TextBoxValue; } ); m_dlg.FormClosed += new FormClosedEventHandler( (sender2, e2) => { m_dlg = null; } ); m_dlg.Show(this); } else { m_dlg.Activate(); } }MyDialog.cspublic event EventHandler TextBoxChanged; public string TextBoxValue { get { return textBox1.Text; } set { textBox1.Text = value; } } public MyDialog() : this("") { } public MyDialog(string Param) { InitializeComponent(); TextBoxValue = Param; } private void button1_Click(object sender, EventArgs e) { Close(); } private void textBox1_TextChanged(object sender, EventArgs e) { if (TextBoxChanged != null) TextBoxChanged(this, e); } A 窗体,定义一个 事件:delagate LabelText(string newText);event LabelText ChangeLableText;protected void InvokeChangeLableText(newText){ if(ChangeLableText!=null) ChangeLableText.Invoke(newText);}然后,B 窗体,在 打开 和 关闭时做到:A.ChangeLableText += BChangeLable;和 A.ChangeLableText -= BChangeLable;private void BChangeLable(string newText){ lbl.Text=newText;}--------------------------------------------------------这就是一个 委托机制了:B 和 A没有任何强关联和代码过分渗透;----------------------------当然:A 的 InvokeChangeLableText(newText) 是需要A自己调用的:比如: InputTextChanged(object sender, *** e) { InvokeChangeLableText(txtInput.Text); //文本框的值改变,则 触发事件; //而此时的B,正在监视A的这个事件,于是 B就修改自己的值——绝对的实时同步! } 额,楼上的做法和我一样的!!——也用了事件的:---------------------------------------如果楼主需要监视的不是一个 字符串,而是 一个 object那么,只需要 delagate LabelText(string newText);改成 delagate LabelText(object newObject);就可以了!! 怎样实现SQL Server数据库中某个字段的值唯一,且可以动态改变 C# excel 简单的问题哦 有关静态构造函数 关于.net framework2.0、3.5和4.0 datatable dt=(DataTable)datagridview.DataSource后,改变datagridview能否使dt也跟着变化 c#序列化和反序列化的问题 DropDownList问题 奇怪的浏览器地址显示问题??????????????????????? 打开文件 如何控制按钮的位置 C# .NET Remoting做服务端分析
{
using (MyDialog dlg = new MyDialog(richTextBox1.Text))
{
if (dlg.ShowDialog() == DialogResult.OK)
{
richTextBox1.Text = dlg.TextBoxValue;
}
}
} private void toolStripButton2_Click(object sender, EventArgs e)
{
if (m_dlg == null)
{
m_dlg = new MyDialog(richTextBox1.Text);
m_dlg.TextBoxChanged += new EventHandler(
(sender1, e1) =>
{ richTextBox1.Text = m_dlg.TextBoxValue; }
);
m_dlg.FormClosed += new FormClosedEventHandler(
(sender2, e2) => { m_dlg = null; }
);
m_dlg.Show(this);
}
else
{
m_dlg.Activate();
}
}
MyDialog.cspublic event EventHandler TextBoxChanged; public string TextBoxValue
{
get { return textBox1.Text; }
set { textBox1.Text = value; }
} public MyDialog() : this("") { } public MyDialog(string Param)
{
InitializeComponent();
TextBoxValue = Param;
} private void button1_Click(object sender, EventArgs e)
{
Close();
} private void textBox1_TextChanged(object sender, EventArgs e)
{
if (TextBoxChanged != null)
TextBoxChanged(this, e);
}
delagate LabelText(string newText);
event LabelText ChangeLableText;
protected void InvokeChangeLableText(newText){
if(ChangeLableText!=null)
ChangeLableText.Invoke(newText);
}然后,
B 窗体,在 打开 和 关闭时做到:
A.ChangeLableText += BChangeLable;
和 A.ChangeLableText -= BChangeLable;private void BChangeLable(string newText)
{
lbl.Text=newText;
}
--------------------------------------------------------
这就是一个 委托机制了:B 和 A没有任何强关联和代码过分渗透;----------------------------
当然:A 的 InvokeChangeLableText(newText) 是需要A自己调用的:比如: InputTextChanged(object sender, *** e)
{
InvokeChangeLableText(txtInput.Text);
//文本框的值改变,则 触发事件;
//而此时的B,正在监视A的这个事件,于是 B就修改自己的值——绝对的实时同步!
}
如果楼主需要监视的不是一个 字符串,而是 一个 object
那么,只需要
delagate LabelText(string newText);
改成
delagate LabelText(object newObject);就可以了!!