我現在踢自己在這個,但你會在下面的代碼,請注意,我使用Form4一個參數的構造函數。 C#中參數化構造函數的標準過程是在聲明之後使用:this()
(我認爲,至少對於Forms而言)。這首先調用未參數化/默認構造函數,其中包含設置窗體及其控件的InitializeComponent()
。
InitializeComponent()
最應該不是在參數的構造函數,如果你已經使用:this()
,因爲它重新初始化與「新」的控制你的形式。這會導致您的表單和控件的模糊狀態,以及我得到的奇怪行爲。
原始的問題
我在我想的控件(包括文本框),以對第一視圖的初始值的形式。這些值在Form的構造過程中來自SQL語句,所以我不能使用Form設計器。這個表單的元素/控件也是從幾乎相同的表單複製粘貼的,因爲那個是'Add',而這個是'編輯'
問題是這樣的:使用調試器顯示我成功地從SQL,並且設置textbox.Text
成功,但是當顯示錶單時,它不反映所做的更改。答案在這裏:https://stackoverflow.com/a/7830769/1655707意味着該值可以簡單地設置(大概在初始化或負載期間)。
我已經嘗試過在初始化過程中,在Load事件和Shown事件中進行這些工作,而沒有一個工作。調用Refresh()
和Application.DoEvents()
也沒有做任何事。有什麼我失蹤?某些阻止此文本框正確更新/顯示的事件?複製粘貼控件是否有意想不到的副作用?
我嘗試以這種方式設置的控件都沒有顯示改變的值,但是文本框是最簡單的,因爲它沒有混亂的索引。
public Form4(int collIDFromParent, string collNameFromParent): this()
{
InitializeComponent();
retCollID = collIDFromParent;
retCollName = collNameFromParent;
//Initialize these here so they activate on first use0
button1.DialogResult = DialogResult.None;
button2.DialogResult = DialogResult.Cancel;
//PopulateEditData goes first for potential SQL failure
PopulateEditData();
textBox6.Text = "TEST";
}
private void Form4_Load_1(object sender, EventArgs e)
{
textBox1.Text = "TEST";
}
private void Form4_Shown_1(object sender, EventArgs e)
{
textBox2.Text = "TEST";
}
是的,他們設置不同的文本框,但他們都沒有工作,所以它沒有什麼區別。
典型的文本框更改處理程序。有人可能會認爲,它現在寫的方式可能會引起某種重新設置,但是評論說一條線不會改變我所關心的行爲。
private void textBox6_TextChanged_2(object sender, EventArgs e)
{
retCollName = textBox6.Text;
}
複製/粘貼控件時,您是使用設計器還是從代碼執行此操作? – CodingGorilla
@編碼設計器,以保持佈局,而不必手動指定位置 –
你看過設計器代碼(通常隱藏在一個區域內),以確保它更新所有內容以引用粘貼的表單*到*並且還沒有引用您從*粘貼*的形式? – CodingGorilla