Как изменить текст в текстовом поле в другой форме в Visual C #? - PullRequest
3 голосов
/ 27 ноября 2009

В Visual C #, когда я нажимаю кнопку, я хочу загрузить другую форму. Но прежде чем эта форма загрузится, я хочу заполнить текстовые поля некоторым текстом. Я попытался ввести некоторые команды для этого, прежде чем показывать форму, но я получаю сообщение об ошибке, в котором говорится, что текстовое поле недоступно из-за уровня защиты.

Как мне установить текстовое поле в форме, прежде чем я его покажу?

 private void button2_Click(object sender, EventArgs e)
    {

        fixgame changeCards = new fixgame();
        changeCards.p1c1val.text = "3";
        changeCards.Show();


    }

Ответы [ 7 ]

20 голосов
/ 27 ноября 2009

Когда вы создаете новую форму в обработчике события нажатия кнопки, вы создаете экземпляр нового объекта формы и затем вызываете его метод show.

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

Итак, приведенный ниже код добавляет свойство в класс Form2, которое устанавливает ваше текстовое поле (где textbox1 - это имя вашего текстового поля). Я предпочитаю этот метод, а не отображение самого TextBox за счет изменения его модификатора доступа, потому что он обеспечивает лучшую инкапсуляцию, обеспечивая контроль над использованием текстового поля.

public partial class Form2 : Form
{
    public Form2()
    {
        InitializeComponent();
    }

    public string TextBoxValue
    {
        get { return textBox1.Text;} 
        set { textBox1.Text = value;}
    }                       
}

И в событии нажатия кнопки первой формы вы можете просто иметь код:

private void button1_Click(object sender, EventArgs e)
{
    Form2 form2 = new Form2();
    form2.TextBoxValue = "SomeValue";
    form2.Show();
}
3 голосов
/ 27 ноября 2009

Вы можете установить свойство "Модификаторы" элемента управления TextBox на "Public"

1 голос
/ 20 сентября 2016

Попробуйте это ..:)

Form1 f1 = (Form1)Application.OpenForms["Form1"];
TextBox tb = (TextBox)f1.Controls["TextBox1"];
tb.Text = "Value";
1 голос
/ 22 апреля 2016

Я знаю, что это было давно, но, кажется, довольно популярная тема с множеством повторяющихся вопросов. Теперь у меня была похожая ситуация, когда у меня был класс, который вызывался из других классов со многими отдельными потоками, и мне приходилось обновлять одну конкретную форму из всех этих других потоков. Поэтому создание обработчика события делегата было ответом.

Решение, которое сработало для меня:

  1. Я создал событие в классе, который я хотел обновить в другой форме. (Сначала я создал экземпляр формы (названной SubAsstToolTipWindow) в классе.)

  2. Затем я использовал это событие (ToolTipShow) для создания обработчика событий в форме, на которой я хотел обновить метку. Работал как шарм.

Я использовал это описание для разработки своего собственного кода ниже в классе, который выполняет обновление :

public static class SubAsstToolTip
{
    private static SubAsstToolTipWindow ttip = new SubAsstToolTipWindow();
    public delegate void ToolTipShowEventHandler();
    public static event ToolTipShowEventHandler ToolTipShow;

    public static void Show()
    {
        // This is a static boolean that I set here but is accessible from the form.
        Vars.MyToolTipIsOn = true; 
        if (ToolTipShow != null)
        {
            ToolTipShow();
        }
    }

    public static void Hide()
    {
        // This is a static boolean that I set here but is accessible from the form.
        Vars.MyToolTipIsOn = false;
        if (ToolTipShow != null)
        {
            ToolTipShow();
        }
    }
}

Тогда код в моей форме , который был обновлен :

public partial class SubAsstToolTipWindow : Form
{
    public SubAsstToolTipWindow()
    {
        InitializeComponent();
        // Right after initializing create the event handler that 
        // traps the event in the class
        SubAsstToolTip.ToolTipShow += SubAsstToolTip_ToolTipShow;
    }

    private void SubAsstToolTip_ToolTipShow()
    {
        if (Vars.MyToolTipIsOn) // This boolean is a static one that I set in the other class.
        {
            // Call other private method on the form or do whatever
            ShowToolTip(Vars.MyToolTipText, Vars.MyToolTipX, Vars.MyToolTipY);     
        }
        else
        {
            HideToolTip();
        }

    }

Надеюсь, это поможет многим из вас все еще сталкиваться с такой же ситуацией.

0 голосов
/ 05 апреля 2016
private void button1_Click(object sender, EventArgs e)
{    
    Form2 frm = new Form2();
    TextBox txt = (TextBox)frm.Controls.Find("p1c1val", true)[0];
    txt.Text = "foo";
}
0 голосов
/ 13 февраля 2014

У меня тоже были такие же сомнения, поэтому я искал в интернете и нашел хороший способ передавать значения переменных между формами в C #, это просто, что я ожидал. Это ничего, кроме назначения переменной в первой форме, и вы можете получить доступ к этой переменной из любой формы. Я создал видеоурок на тему «Как передать значения в форму»

Перейдите по ссылке ниже, чтобы посмотреть видеоурок.

Передача текста текстового поля в другую форму в Visual C #

0 голосов
/ 27 ноября 2009

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

private System.Windows.Forms.TextBox textBox1;

до:

protected System.Windows.Forms.TextBox textBox1;

Защищенное ключевое слово является модификатором доступа участника. Защищенный член доступен из класса, в котором он объявлен, и из любого класса, производного от класса, который объявил этот член (дополнительную информацию см. В этой ссылке ).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...