Создание временного имени для кнопки - PullRequest
0 голосов
/ 17 октября 2018

Я искал решение уже несколько дней.
В настоящее время есть 2 Forms.Main Form имеет несколько кнопок, скажем (1-10).
Все кнопки откроют мои 2 Form (скажем, я нажимаю Button 4).На моем втором Form у меня есть ComboBox с разными именами и кнопка подтверждения.Когда я выбираю имя из ComboBox, затем нажимаю кнопку подтверждения.

Я хочу, чтобы имя, выбранное в ComboBox, отображалось как текст новой кнопки из моей формы Main(То есть name3 из Form 2 ComboBox заменит Button текст (Button 4) на главном Form).

Любые предложения о том, как мне этого добиться?

  • Я могу получить текст с ComboBox на Main Form в Label или Button по своему выбору, но я не могу сделать это с помощью нажатой кнопки на MainForm, которое открылось 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();
}

thisForm 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 голосов
/ 17 октября 2018

Есть много способов достичь своей цели.Я надеюсь, что вы попытаетесь использовать событие.

Вы можете создать свое собственное событие, как показано ниже.

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;

и вы можете получить текст, выбранный этим пользователем, из пользовательского события в форме 2.

//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();
    }
}
0 голосов
/ 17 октября 2018

Не работайте с элементами управления других форм.Вместо этого работайте со значениями.
В вашем случае, когда вы закончили и закрыли 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...