簡體   English   中英

如何在Visual C#中的另一個窗體上的文本框中更改文本?

[英]How to change text in a textbox on another form in Visual C#?

在Visual C#中,當我單擊一個按鈕時,我想加載另一個表單。 但在該表單加載之前,我想用一些文本填充文本框。 在顯示表單之前,我嘗試使用一些命令來執行此操作,但是我收到一條錯誤,指出文本框由於其保護級別而無法訪問。

如何在顯示之前在表單中設置文本框?

 private void button2_Click(object sender, EventArgs e)
    {

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


    }

在按鈕單擊事件處理程序中創建新表單時,您實例化一個新的表單對象,然后調用其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();
}

您可以將TextBox控件的“Modifiers”屬性設置為“Public”

我知道這是很久以前的事了,但似乎是一個非常受歡迎的主題,有許多重復的問題。 現在我有一個類似的情況,我有一個類,從其他類調用具有許多單獨的線程,我不得不從所有其他線程更新一個特定的表單。 因此創建一個委托事件處理程序就是答案。

對我有用的解決方案:

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

    }

我希望這有助於你們中的許多人仍然遇到同樣的情況。

嘗試這個.. :)

Form1 f1 = (Form1)Application.OpenForms["Form1"];
TextBox tb = (TextBox)f1.Controls["TextBox1"];
tb.Text = "Value";

在設計器代碼隱藏文件中,只需更改默認情況下文本框的聲明:

private System.Windows.Forms.TextBox textBox1;

至:

protected System.Windows.Forms.TextBox textBox1;

protected關鍵字是成員訪問修飾符。 受保護的成員可以從聲明它的類中訪問,也可以從聲明該成員的類派生的任何類中訪問(有關詳細信息,請參閱此鏈接 )。

我也有同樣的疑問,所以我在互聯網上搜索並找到了一種在C#中表單之間傳遞變量值的好方法,這很簡單。 它沒什么,但是在第一個Form中分配一個變量,你可以從任何形式訪問該變量。 我創建了一個關於“如何將值傳遞給表單”的視頻教程

轉到以下鏈接以查看視頻教程。

在Visual C#中將文本框文本傳遞給另一個表單

private void button1_Click(object sender, EventArgs e)
{    
    Form2 frm = new Form2();
    TextBox txt = (TextBox)frm.Controls.Find("p1c1val", true)[0];
    txt.Text = "foo";
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM