Неможливо змінити текстовий текст

Це добре працює:

 private void button1_Click(object sender, EventArgs e)        
    {
         textBox1.Text = "dsfsdfsd";
    }

але коли я використовую його як це, він ніколи не працює textbox1.text успішно Chang в компіляторі, але текст нічого не відображається

private void button1_Click(object sender, EventArgs e)
    {
        Form1 form1 = new Form1();
        form1.click();
    }

public  void click()
    {
        textBox1.Text= "asdasdas";
    }

будь ласка, поясніть, чому я не можу змінити текстове поле з будь-яких методів, за винятком методу, що безпосередньо стосується користувача (кнопок), навіть якщо я поклав метод мосту між методом (кнопка) та textbox1.text = (" asdasdas "); , він ніколи не працює. Порадьте, будь ласка.

3
Я рекомендую читати хорошу книгу на ООП.
додано Автор Leri, джерело
Чи можеш ти натиснути на нову створений з якої не відображається?
додано Автор wonko79, джерело

7 Відповіді

private void button1_Click(object sender, EventArgs e)
{
    click();
}

Вам не потрібно створювати новий екземпляр форми, щоб викликати один із методів.

4
додано
@ user2523189 Ваш метод натискання не може бути статичним, оскільки він посилається на поля екземплярів.
додано Автор vc 74, джерело
дякую вам так багато, що це workeeedddd :)))))))))))))))))
додано Автор user2523189, джерело

Ви повинні передплатити події TextChanged ПЕРЕД , щоб фактично змінювати текст, інакше обробник подій ще не приєднаний:

public void click()
{
    textBox1.TextChanged += new EventHandler(textBox1_TextChanged);
    textBox1.Text = "asdasdas";
}

Також ви не повинні підписуватися кілька разів на ту ж подію, коли називається метод натискання. Краще було б виконати цю підписку лише один раз, наприклад, у конструкторі:

public class Form1: Form
{
    public Form1()
    {
        textBox1.TextChanged += new EventHandler(textBox1_TextChanged);
    }

    public void click()
    {
        textBox1.Text = "asdasdas";
    }

    public void textBox1_TextChanged(object sender, EventArgs e)
    {

    }    
}
2
додано
Звичайно, що це важливо. Він підписується на події TextChanged після того, як він змінив текст і очікує, що подія буде запущена. У його прикладі подія порожня, але я думаю, що він сподівається, що це спрацьовує.
додано Автор Darin Dimitrov, джерело
Це дійсно важливо (з огляду на те, що eventhandler нічого не робить)? Замість нього він повинен показувати форму.
додано Автор Klaus Byskov Pedersen, джерело
Гаразд, ви можете бути в порядку. Я думаю, що він створює інший Form1 , який він не може показати, і натискає на цей екземпляр, таким чином, цікавить, чому текст не оновлюється у прикладі Form1 , що є екземпляром в метод Main . Але я просто гадаю.
додано Автор Klaus Byskov Pedersen, джерело
Я пробував це, але це не спрацювало мого друга :(
додано Автор user2523189, джерело
Я думаю, що це справжній запит, але те, що я повинен зробити, щоб зателефонувати йому form1 який я показую
додано Автор user2523189, джерело

Here is a complete guide how to make a Windows form app. You have to start learning from the basics. Your First C# Windows Form

1
додано

Це тому, що ви new вводите новий екземпляр Form1 . button1_Click є членом Form1 , тому ви вже маєте екземпляр Form1 , який вам потрібно буде працювати.

тобто

private void button1_Click(object sender, EventArgs e)
{
    this.click();//or just `click();`
}

public  void click()
{
    textBox1.Text= "asdasdas";
}

private void textBox1_TextChanged(object sender, EventArgs e)
{

}
1
додано
user2523189, я думаю, вам потрібно вивчити основи об'єктно-орієнтованого програмування для подальшого розвитку ваших знань у цій галузі. Ваша програма починається з методу Main (), який є статичним методом. Звідси ви можете запустити послідовність команд (виклики методу) або, швидше за все, створити екземпляр класу (наприклад, форму) і викликати на нього єдиний метод. У цьому прикладі у вас є ваша форма1, що робить це - вам не потрібно знову дивитись на програму .cs.
додано Автор jamespconnor, джерело
Дякую вам, що я розумію цю ідею зараз, але якщо я хочу називати метод клавіші з program.cs.i використано цей код form1.cs private void button1_Click (відправник об'єкта, EventArgs e) {Program.bridge (); } program.cs public static void bridge() {Form1 there = new Form1 (); there.click (); } form1.cs public void click() {textBox1.Text = "asdasdas"; textBox1.TextChanged + = newEventHandler (textBox1_TextChanged); }
додано Автор user2523189, джерело

Ви створюєте новий екземпляр форми та натискаєте на нього, що не є формою, яку ви шукаєте, щоб ви не побачили цю зміну.

Замість цього просто наберіть метод Click() цієї форми.

0
додано

Оскільки ви викликаєте метод click() на екземплярі Form , змініть свій код на цей:

private void button1_Click(object sender, EventArgs e)
{
    click();
}

public  void click()
{
    textBox1.Text= "asdasdas";
}
0
додано

Я думаю, що виклик Program.bridge викликає незручності.

private void button1_Click(object sender, EventArgs e)
{
    Program.bridge();        
}

У цьому методі ви створюєте новий Form1 . Це не вплине на форму, яка вже відображається. Спробуйте змінити функцію button1_click таким чином і подивіться, чи це допомагає:

private void button1_Click(object sender, EventArgs e)
{
    this.click();        
}

EDIT: If you must use the bridge approach, you can do it like this in your Program.cs:

public static class Program
{
    /// 
/// The main entry point for the application. ///
 
    [STAThread]
    static void Main()
    {
        Application.EnableVisualStyles();
        Application.SetCompatibleTextRenderingDefault(false);
        TheForm = new Form1();
        Application.Run(TheForm);
    }

    private static Form1 TheForm { get; set; }

    public static void bridge()
    {
        TheForm.Click();
    }
}

Я не рекомендую цей підхід, але якщо потрібно ...

0
додано
@ user2523189, тоді ви повинні перебудувати свій код. У програмі .cs ви повинні зберегти посилання на форму, щоб ви маніпулювали це пізніше.
додано Автор Klaus Byskov Pedersen, джерело
@ user2523189 Я оновив мою відповідь.
додано Автор Klaus Byskov Pedersen, джерело
як це працює, але я хочу змінити текст з program.cs тому, що мені потрібна ця функція у моєму коді :)
додано Автор user2523189, джерело
і як я можу це зробити?
додано Автор user2523189, джерело
Спасибі, що багато ур вирішено, і тепер я розумію поняття. Але чому б ви не рекомендували це рішення. Що, якщо мій код повинен змінити все в користувальницькому інтерфейсі, чи є ще одне рішення, якщо мій код повинен змінити щось у користувальницькому інтерфейсі ?..спасибі за ваш час
додано Автор user2523189, джерело
var chat = new Chat();
var chat = new Chat();
642 учасників

Обсуждение вопросов по C# / .NET / .NET Core / .NET Standard / Azure Сообщества-организаторы: — @itkpi — @dncuug