2012-05-14 21 views
5

Tôi là người mới trong C# và studio trực quan, nhưng không phải là lập trình nói chung. Tôi đã tìm kiếm câu trả lời cho câu hỏi của mình trong 3 ngày và tôi đã tìm thấy nhiều câu hỏi, nhưng vì lý do lạ lùng nào đó (tôi chắc chắn rằng mình thiếu một số thứ rất rõ ràng). Tôi nghĩ đó là những người mới hỏi câu hỏi cơ bản nhất như tôi hỏi. Tôi có một biểu mẫu (Form3) với một hộp văn bản và một nút (tôi thiết lập nó chỉ dành cho mục đích thử nghiệm). Tôi muốn điền và đọc hộp văn bản này từ một lớp khác. Tôi hiểu cách thích hợp nhất để làm điều này là tạo một thuộc tính trong Form3.cs với các trình truy cập GET và SET. Tôi đã làm điều đó nhưng tôi không thể làm cho nó hoạt động. Tôi không nhận được bất kỳ thông báo lỗi nào, nhưng tôi cũng không thể đặt giá trị của hộp văn bản. Nó chỉ còn trống. Đây là mã mẫu của tôi:Truy cập Điều khiển Biểu mẫu từ một lớp khác C#

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"; 
     } 
    } 
} 

Ai đó có thể giúp tôi giải quyết vấn đề này không?

+1

Bạn có thể cần phải học (hoặc bàn chải lên) ý tưởng của từ khóa 'static' và cách hoạt động của các đối tượng. Nếu bạn cần trợ giúp tìm kiếm điều đó, hãy sử dụng Google, hãy tìm phần giới thiệu lập trình hướng đối tượng cơ bản hoặc hỏi tại đây. –

+0

Xin chào Tim, bạn đúng 100%. Tôi cần phải nhấn trợ giúp và tìm hiểu cách sử dụng từ khóa tĩnh. Tôi cảm thấy đây là nơi ít nhất là một phần của vấn đề. -Tony. – Tony

Trả lời

2

Bạn đang tạo một thương hiệu new Form3() thể hiện.
Điều này không ảnh hưởng đến biểu mẫu hiện tại.

Bạn cần chuyển biểu mẫu dưới dạng tham số cho phương thức.

5

Vấn đề là bạn đang đặt giá trị thành phiên bản mới của biểu mẫu. Hãy thử một cái gì đó như thế này:

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"; 
    } 
}  
+0

Hi ivowiblo, Như tôi đã nói, tôi là một người mới nhưng câu trả lời dưới đây bởi Enigmativity dường như là một chút ít phức tạp với tôi và nó thực sự hoạt động. Anh ta không tạo ra trường hợp mới của lớp A trong Form3 và chỉ có 1 phương pháp trong lớp A. Có vẻ như có nhiều câu trả lời duy nhất vì có người trả lời. Vẻ đẹp của internet. Cảm ơn câu trả lời của bạn, tôi đã đạt được một số quan điểm độc đáo từ nó. – Tony

+0

Đúng. Những gì tôi sẽ nói là C# là một ngôn ngữ hướng đối tượng và tôi sẽ đề nghị sử dụng các thiết kế hướng đối tượng thay vì thiết kế thủ tục. Như bạn nói, giải pháp @ Enigmativity thực hiện công việc và điều đó đúng. Có lẽ trong kịch bản thực tế của bạn, bạn có một tình huống phức tạp hơn và sử dụng một đối tượng sẽ làm cho nó dễ dàng hơn (giả sử bạn cần truyền nhiều thứ hơn, một số biểu mẫu không biết) – ivowiblo

2

Hãy thử điều này:

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"; 
    } 
} 

này vượt qua dụ hiện tại của các hình thức để các lớp khác để nó có thể cập nhật các setCodes tài sản. Trước đây bạn đã tạo một cá thể biểu mẫu mới thay vì cập nhật biểu mẫu hiện tại.

+0

Xin chào, điều này đã làm việc rất tốt. Tôi thực sự đánh giá cao sự giúp đỡ của bạn. -Tony. – Tony

-2

Gửi hình thức dụ đến lớp khác khác

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

Cách dễ dàng để truy cập điều khiển trong lớp khác bằng cách sửa đổi Controls Private để Public trong Mẫu (Designer.cs)

+0

làm cách nào bạn có thể nhận được obj.Validate? – Androidz

Các vấn đề liên quan