none
如何使用Get 和 Set 存取Property? RRS feed

  • 問題

  • 有兩個Form (Form1, 和一個class (gettext))

     

    我想在不設定Public Static變數和建立Function傳送Parameter的情況下,

     

    gettext的class可以存取Form1中的TextBox1.text

     

    我嘗試在 Form1中加入Get ; Set ,沒有程式錯誤,但返回空白的結果,我參照過一些示範,他們寫法都是一樣.

    而且我都已經把TextBox1 設做Public 了.

    namespace WindowsFormsApplication1
    {
        public partial class Form1 : Form
        {
            private string _strtext;
            public string strtext
            {
                get { return _strtext ; }
                set { _strtext = textBox1.Text; }
            }
    
            public Form1()
            {
                InitializeComponent();
            }
    
            private void Form1_Load(object sender, EventArgs e)
            {
                textBox1.Text = "1 2 3 4 5 6";
            }
    
            private void button1_Click(object sender, EventArgs e)
            {
                gettext g = new gettext();
                textBox1.Text = g.replace_textbox1_space();
            }
        }
    }
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    
    gettext.cs
    namespace WindowsFormsApplication1
    {
        class gettext
        {
            public string replace_textbox1_space()
            {
                Form1 f = new Form1();
                string s = f.strtext.Replace(" ","");
                return s;
            }
    
    
        }
    }
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    
    2008年3月4日 上午 10:34

所有回覆

  •  

    我再三試試,我估計是

    因為Form1 f = new Form1();

    出現問題.

     

    因為Textbox1中的Text 是在Form_Load後才加入

    所以new form1 時,textbox1沒有加入123456

    但問題是,若我不用

    Form1 f = new Form1(); 去建立 f

    就不知怎呼叫 f.textbox1.text

     

    還是我應該把Get , Set 寫進gettext 的Class中?

     

    2008年3月4日 上午 10:39
  • 你這種交互的操作會衍生很多問題,你碰到的只是其中一種而已。你應該要把控制的程式集合起來,而不是這個表單寫一點,那個表單寫一點,然後串起來,這樣你以後要維護就很困難了。

     

    你的類別概念也很奇怪,建議你去翻翻 OOP 的書,把 OOP 的概念補起來比較好。

     

    2008年3月4日 上午 10:46
    版主
  •  

    其實我主要是想在CLASS中存取Form的TextBox.都是在網上找回來的做法

    是否在Form設一個 public static的變數會更好??

    2008年3月4日 下午 12:55
  • 我來模擬你的replace_textbox1_space()程式流程吧
    Form1 f = new Form1();
    使用new建構子,執行了Form1()建構式中的 InitializeComponent();
    InitializeComponent();包含了執行Form1_Load和指派各種觸發事件
     
    f 的狀態為
     _strtext == ""
    textBox1.Text ==  "1 2 3 4 5 6"
     
    string s = f.strtext.Replace(" ","");
     
    呼叫strtext的get { return _strtext ; }
    由於 _strtext == ""
    所以回傳""
    然後再執行Replace(" ","")
     
     
    有如小朱所說的
    你的物件導向的觀念與應用方法幾乎錯誤
    2008年3月4日 下午 04:06
  •  

    namespace WindowsFormsApplication1
    {
        public partial class Form1 : Form
        {
             public string strtext
            {
                get { return _textBox1.Text; }
                set { textBox1.Text=value; }
            }
    
            public Form1()
            {
                InitializeComponent();
            }
    
            private void Form1_Load(object sender, EventArgs e)
            {
                textBox1.Text = "1 2 3 4 5 6";
            }
    
            private void button1_Click(object sender, EventArgs e)
            {
                gettext g = new gettext();
                textBox1.Text = g.ReplaceSpace(textBox1.Text);
            }
        }
    }
     
    namespace WindowsFormsApplication1
    {
        class gettext
        {
            public string ReplaceSpace(string text)
            {
               return text.Replace(" ","");
            }
    
    
        }
    }
    
    2008年3月5日 上午 01:10
  • 那不用get set, 大家會如何在Class的Function 取得Form的Textbox ??

    2008年3月5日 上午 03:38
  • 宣告完Form1 f=new Form();
    直接打f.textbox1.text不就搞定了
    2008年3月5日 下午 02:42
  • private void button1_Click(object sender, EventArgs e)
     {
                gettext g = new gettext();
                textBox1.Text = g.replace_textbox1_space(textBox1.Text);
     }


     class gettext
     {
            public string replace_textbox1_space(string text)
            {
                return text.Replace(" ","");
            }
      }

    把TextBox的值傳進去,處理完再Return就好.
    2008年3月7日 下午 01:21