几天来我一直在寻找解决方案。
目前有2个Forms
。主Form
有多个按钮,可以说(1-10)。
所有按钮将打开我的第二个Form
(例如,我按下Button
4)。在我的第二个Form
上,我有一个ComboBox
(名称不同)和一个确认按钮。当我从ComboBox
中选择一个名称时,请按确认按钮。
我希望将ComboBox
中选择的名称显示为我的Main
表单中的新按钮文本(因此name3
中的Form
2 ComboBox
将替换主Button
上的Button
文本(Form
4)。
关于如何实现此目标的任何建议?
我可以将文本从ComboBox
到Main Form
转换成我选择的Label
或Button
,但是我不能主Form
上按下的按钮打开了Form
2。
我尝试将在Main Form
上按下的按钮更改为buttonTemp
的名称,然后让ComboBox
中的文本更改buttonTemp
文本,但这是即将出现,因为Form
2上不存在。
Form
1个代码:
public void b1111_Click(object sender, EventArgs e)
{
b1111.BackColor = Color.Red;
buttonTemp.Name = "bTemp2";
b1111.Name = "buttonTemp";
Classroom f4 = new Classroom();
f4.Show();
}
这是在Form
2上:
private void button1_Click(object sender, EventArgs e)
{
temp1 = comboBox1.Text;
// trying to figure out the label text
foreach (Term1 Form1 in Application.OpenForms.OfType<Term1>())
{
Form1.buttonTemp.Text = comboBox1.Text;
}
this.Close();
}
答案 0 :(得分:0)
请勿在其他形式的控件上进行操作。而是使用值进行操作。
在您完成并关闭Form2的情况下,可以将值返回给Form1,并使用返回的值更新按钮文本。
在Form2中创建将在关闭Form2之前填充的公共属性。
public string SelectedName { get; set; }
private void selectNameButton_Click(object sender, EventArgs e)
{
SelectedName = comboBox1.Text;
this.Close();
}
在Form1中,使用.ShowDialog()
方法以模式形式显示表单
public void openForm2Button_Click(object sender, EventArgs e)
{
openForm2Button.BackColor = Color.Red;
using (var form = new Classroom())
{
form.ShowDialog();
// next line will be execute after form2 closed
openForm2Button.Text = form.SelectedName; // update button text
}
}
在评论中由@Enigmativity建议
// Form 2
public string SelectedName => comboBox1.Text;
private void selectNameButton_Click(object sender, EventArgs e)
{
this.Close();
}
// Form 1 remains same
答案 1 :(得分:-1)
有很多方法可以实现目标。 希望您尝试使用事件。
您可以按照以下步骤进行自己的活动。
private void Form1_Load(object sender, EventArgs e)
{
//define listen event from custom event handler
_form2.OnUserSelectNewText += new Form2.TextChangeHappen(_form2_OnUserSelectNewText);
}
当拥有成员变量以记住用户单击了哪个按钮时。
private Control activeControl = null;
,您可以从Form2的自定义事件中获取用户选择的文本。
//to make simple code, centralize all buttons event to here.
private void button_Click(object sender, EventArgs e)
{
//to remeber which button is clicked.
activeControl = (Button)sender;
_form2.ShowDialog();
}
然后您只需更改“ activeControl”的文本即可。
private void _form2_OnUserSelectNewText(string strText)
{
activeControl.Text = strText;
}
请参考此内容,如何使用委托进行自定义事件。
public partial class Form2 : Form
{
//you can expand your own custom event, string strText can be Control, DataSet, etc
public delegate void TextChangeHappen(string strText); //my custom delegate
public event TextChangeHappen OnUserSelectNewText; //my custom event
public Form2()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
// to prevent null ref exception, if there is no event handler.
if (OnUserSelectNewText != null)
{
OnUserSelectNewText(this.comboBox1.Text);
}
this.Close();
}
}