为按钮创建一个临时名称

时间:2018-10-16 22:21:57

标签: c# windows

几天来我一直在寻找解决方案。
目前有2个Forms。主Form有多个按钮,可以说(1-10)。
 所有按钮将打开我的第二个Form(例如,我按下Button 4)。在我的第二个Form上,我有一个ComboBox(名称不同)和一个确认按钮。当我从ComboBox中选择一个名称时,请按确认按钮。

我希望将ComboBox中选择的名称显示为我的Main表单中的新按钮文本(因此name3中的Form 2 ComboBox将替换主Button上的Button文本(Form 4)。

关于如何实现此目标的任何建议?

  • 我可以将文本从ComboBox到Main Form转换成我选择的LabelButton,但是我不能主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();
}

2 个答案:

答案 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();
    }
}