[英]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”
我知道這是很久以前的事了,但似乎是一個非常受歡迎的主題,有許多重復的問題。 現在我有一個類似的情況,我有一個類,從其他類調用具有許多單獨的線程,我不得不從所有其他線程更新一個特定的表單。 因此創建一個委托事件處理程序就是答案。
對我有用的解決方案:
我在類中創建了一個事件,我想在另一個表單上進行更新。 (當然,我在類中實例化了表單(稱為SubAsstToolTipWindow
)。)
然后我使用這個事件( 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中分配一個變量,你可以從任何形式訪問該變量。 我創建了一個關於“如何將值傳遞給表單”的視頻教程
轉到以下鏈接以查看視頻教程。
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.