2015-03-13 188 views
1

我的問題很簡單。我想單擊Form1中的一個面板,這將導致放置在form2上的userControl1中的label1更改爲「Text」。C#:試圖改變一個usercontrol文本框和背景顏色

單擊此面板也會更改所述userControl1的背景顏色。由於其保護級別,我收到錯誤「'TileInterFaceTest.Usercontrol1.label1'」,這讓我感到困惑。

即使單獨運行顏色更改代碼,它也無法達到所需結果。

要說清楚的是,在C#和編程方面,我是一個新手。直到現在我一直在使用Visual Basic,所以類,方法和對象的概念對我來說有點困惑。

這裏是我的代碼:

using System; 
using System.Collections.Generic; 
using System.ComponentModel; 
using System.Data; 
using System.Drawing; 
using System.Linq; 
using System.Text; 
using System.Threading.Tasks; 
using System.Windows.Forms; 

namespace TileInterFaceTest 
{ 
    public partial class Form1 : Form 
    { 
     public UserControl1 userControl1 = new UserControl1(); 
     public Form2 form2 = new Form2(); 

     public Form1() 
     { 
      InitializeComponent(); 
     } 

     private void panel1_Paint(object sender, PaintEventArgs e) 
     { 

     } 

     private void panel1_DoubleClick(object sender, EventArgs e) 
     { 

     } 



     private void panel1_Click(object sender, EventArgs e) 
     { 
      form2.Show(); 
      userControl1.BackColor = System.Drawing.Color.Red; 
      userControl1.label1 = "Text"; 
     } 


    } 
} 
+0

如果有人願意,仍然需要幫助。 – ShreddedWheat 2015-03-13 18:49:50

回答

1

首先,如圖甚至不顯示的第一個表單上的用戶控件的代碼!這可能就是爲什麼你的顏色變化代碼沒有按照你的預期去做。簡單地寫:

public UserControl1 userControl1 = new UserControl1(); 

只是聲明一個公共字段(壞風格!)並將其設置爲您的用戶控件的新實例。 它沒有把它放在渲染的UI上。

要修復該部分,您需要將它添加到表單的某處。說......在你的構造函數或Loaded事件:

Controls.Add(userControl1); 

還要注意的是這個把它放在Form1。如果你想要它在Form2,那麼表示窗體需要創建控件並將其添加到它的Controls集合,並將其作爲屬性公開(見下文)。另一個問題在這裏:

userControl1.label1 = "Text"; 

推測label1是該用戶控件上的標籤控件。首先,控件是私人用戶控件的成員,您不能只從其他位置訪問它們而不會先暴露它們!您需要在用戶控件中添加如下內容:

public Label Label1 { get { return label1; } } 

請注意使用屬性(正確樣式!)。現在你可以這樣寫:

userControl1.Label1.Text = "Text"; 

注意我定的最後的錯誤在該行,因爲你不能設置一個Label對象爲字符串,它只是沒有任何意義。您需要修改Text屬性。

+0

我非常感謝這個,語法錯誤已經解決了。但是,在啓動該程序時,form1上的面板消失了。在用相同的代碼添加一個按鈕到窗體後,該按鈕出現,但在視覺上切成兩半,按下它會導致錯誤 「在TileInterFaceTest.exe中發生未處理的異常'System.NullReferenceException' 附加信息:你調用的對象是空的。」 – ShreddedWheat 2015-03-13 18:13:50

+1

@ShreddedWheat你必須自己調試那個,因爲我看不到代碼。如果我不得不猜測,「減半」是因爲你的用戶控制覆蓋面板和按鈕。至於NRE,請閱讀:http://stackoverflow.com/questions/4660142/what-is-a-nullreferenceexception-and-how-do-i-fix-it – BradleyDotNET 2015-03-13 18:16:28