C # у меня была путаница - PullRequest
       1

C # у меня была путаница

0 голосов
/ 01 сентября 2010

У меня была путаница, позвольте мне объяснить это вкратце.У меня есть форма, я поместил одно текстовое поле и командную кнопку.и у меня есть один простой класс.

код class1.

class Class1
{
    string s = "hi";
    Form1 form1 = new Form1();
    public void cl()
    {
        form1.textBox1.Text = s;

    }


}

код form1

private void button1_Click(object sender, EventArgs e)
    {
        Class1 class1 = new Class1();
        class1.cl();
    }

, что моя программа должна делать, когда я нажимаю на кнопку текств текстовом поле должно стать "привет". Моя ошибка - когда я нажимаю кнопку, ничего не происходит.

Ответы [ 6 ]

9 голосов
/ 01 сентября 2010

В Class1 вы создаете новый экземпляр Form1 вместо использования уже существующего экземпляра.В обработчике кнопок вы можете вместо этого передать ссылку на текущую форму следующим образом:

class Class1
{
    string s = "hi";
    Form1 form1;

    public Class1( Form1 targetForm )
    {
        form1 = targetForm;
    }

    public void cl()
    {
        form1.textBox1.Text = s;
    }
}

private void button1_Click(object sender, EventArgs e)
{
    Class1 class1 = new Class1( this );
    class1.cl();
}
0 голосов
/ 01 сентября 2010

Добавьте код для отображения формы. form1.ShowDialog () отобразит форму в виде модального диалога. Модально, вы не можете ничего сделать с исходной формой, пока эта форма не закроется.

Вы получаете поведение, когда ничего не происходит, потому что форма не видна. Как только вы вызовете ShowDialog () , все выполнение кода будет выполняться в этой форме, и вы не сможете выполнять вызовы, пока не закроете форму.

class Class1
{
    string s = "hi";
    Form1 form1 = new Form1();
    public void cl()
    {
        form1.textBox1.Text = s;
        form1.ShowDialog();    // Add this line to show the form.
    }
}
0 голосов
/ 01 сентября 2010

почему вы не ловите свои ошибки?

class Class1
{
    private Form1 _Instance = null;
    public Form1 Instance
    {
        get{return _Instance;}
        set{_Instance = value;}
    }

    public void cl()
    {
        if(Instance == null)
        {
            try
            {
                Instance = new Form1();
            }catch (SomeException e)
            {
                //Log e.ToString();
                return;
            }
        }

        Instance.textBox1.Text = "hiya";
    }
}

Таким образом, ваше приложение будет менее подвержено ошибкам и легче будет отлаживаться.

0 голосов
/ 01 сентября 2010

Вам не хватает вызова метода class1.ShowDialog() в конце вашего обработчика кликов.

0 голосов
/ 01 сентября 2010

Вы создаете новый объект Form1 и устанавливаете значение текстового поля, и вы не устанавливаете значение текстового поля открытой формы.

Вы, вероятно, должны просто позвонить textbox1.Text = "x";.

Если в функции c1 вы вызываете метод Show(), вы увидите новую форму с заполненным текстовым полем.

0 голосов
/ 01 сентября 2010

Вы создаете новый экземпляр Form1, поэтому вы изменяете текст в форме, которая не отображается, а также форму, в которой кнопка была фактически нажата. Вы можете сделать что хотите, передав форму в качестве параметра вызову метода:

class Class1
{
    string s = "hi";
    public void cl(Form1 form1)
    {
        form1.textBox1.Text = s;

    }  
}

private void button1_Click(object sender, EventArgs e)
{
    Class1 class1 = new Class1();
    class1.cl(this);
}

Но может быть лучше, чтобы форма (зависит от реального случая) вносила изменения в внешний вид формы только в самом коде формы, используя вспомогательные классы только для генерации данных, например:

class Class1
{
    string s = "hi";
    public string cl()
    {
         return s;
    }  
}

private void button1_Click(object sender, EventArgs e)
{
    Class1 class1 = new Class1();
    this.textBox1.Text = class1.cl();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...