簡體   English   中英

從另一個類C#訪問表單的控件

[英]Accessing Form's Control from another class C#

我是c#和visual studio的新手,但不是一般的編程。 我在3天內搜索了我的問題的答案,我發現了很多,但是出於一些奇怪的原因(我確定我錯過了一些非常明顯的東西)我無法讓它發揮作用。 我認為這是像我這樣的新手問題。 我有一個表單(Form3),帶有一個文本框和一個按鈕(我設置它只是為了測試目的)。 我想從另一個類填充和閱讀此文本框。 我知道最合適的方法是使用GET和SET訪問器在Form3.cs中創建一個屬性。 我做到了但我無法讓它發揮作用。 我沒有收到任何錯誤消息,但我也無法設置文本框的值。 它只是空白。 這是我的示例代碼:

namespace WindowsFormsApplication1
{
    public partial class Form3 : Form
    {
        public string setCodes
        {
            get { return test1.Text; }
            set { test1.Text = value; }
        }

        public Form3()
        {
            InitializeComponent();
        }

        private void Form3_Load(object sender, EventArgs e)
        {   }

        private void button1_Click(object sender, EventArgs e)
        {
            a.b();
        }
    }

    public class a
    {       
        public static void b()
        {
            Form3 v = new Form3();
            v.setCodes = "abc123";
        }
    }
}

有人可以幫我解決這個問題嗎?

問題是您正在將值設置為表單的新實例。 嘗試這樣的事情:

public partial class Form3 : Form {
    public string setCodes
    {
        get { return test1.Text; }
        set { test1.Text = value; }
    }

    private A a;

    public Form3()
    {
        InitializeComponent();
        a = new A(this);
    } 

    private void button1_Click(object sender, EventArgs e)
    {            
        a.b();            
    }


    private void Form3_Load(object sender, EventArgs e)
    {

    }
}

public class A
{       
    private Form3 v;

    public a(Form3 v)
    {
        this.v = v;
    }

    public void b()
    {
        v.setCodes = "abc123";
    }
}    

您正在創建一個new Form3()實例。
這不會影響現有表格。

您需要將表單作為參數傳遞給方法。

嘗試這個:

public partial class Form3 : Form
{
    /* Code from question unchanged until `button1_Click` */

    private void button1_Click(object sender, EventArgs e)
    {
        a.b(this);
    }
}

public class a
{       
    public static void b(Form3 form3)
    {
        form3.setCodes = "abc123";
    }
}

這會將表單的當前實例傳遞給另一個類,以便它可以更新setCodes屬性。 以前,您正在創建新的表單實例,而不是更新當前表單。

將表單實例發送到其他其他類

Form1 objForm1=new Form1();
obj.Validate(objForm1);

通過在窗體中修改控件PrivatePublic (Designer.cs),輕松訪問另一個類中的控件

暫無
暫無

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

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