Từ 1 tới 9 trên tổng số 9 kết quả

Đề tài: làm sao cho một class truy cập vào các thuộc tính control trong Form

  1. #1
    Ngày gia nhập
    03 2010
    Bài viết
    72

    Mặc định làm sao cho một class truy cập vào các thuộc tính control trong Form

    Trong lúc viết đồ án môn học mình gặp một trở ngại là:Trong project mình tạo một class tên là Player.Trong class này mình có một phương thức để set lại màu các control trên form
    public void CapNhatBanDo(int x, int y)
    {
    string s = "btt" + x.ToString() + "_" + y.ToString();

    foreach (Control a in Server.Controls)
    {

    if (a.Name.Equals(s) == true)
    a.BackColor = Color.Red;
    }
    }
    Nhưng chỗ Server.Controls báo lỗi hoài .(Server là tên Form)
    Các bạn gợi ý cho mình một cách giải quyết nha

  2. #2
    Ngày gia nhập
    10 2009
    Nơi ở
    https://hocduong.vn
    Bài viết
    289

    Trích dẫn Nguyên bản được gửi bởi tto_1991 Xem bài viết
    Trong lúc viết đồ án môn học mình gặp một trở ngại là:Trong project mình tạo một class tên là Player.Trong class này mình có một phương thức để set lại màu các control trên form
    public void CapNhatBanDo(int x, int y)
    {
    string s = "btt" + x.ToString() + "_" + y.ToString();

    foreach (Control a in Server.Controls)
    {

    if (a.Name.Equals(s) == true)
    a.BackColor = Color.Red;
    }
    }
    Nhưng chỗ Server.Controls báo lỗi hoài .(Server là tên Form)
    Các bạn gợi ý cho mình một cách giải quyết nha
    Vì đây là 1 class bên ngoài form Server nên bạn cần truyền 1 biến kiểu form Server này vào hàm

    Code:
     public void CapNhatBanDo(int x, int y,Server frmServer)
            {
                string s = "btt" + x.ToString() + "_" + y.ToString();
                
                foreach (Control a in frmServer.Controls)
                {
                    
                    if (a.Name.Equals(s) == true)
                        a.BackColor = Color.Red;
                }
            }
    sau đó thằng Server nào muốn dùng thì tạo ra obj của class chứa hàm CapNhatBanDo. Rồi sau đó tham số thứ 3 thì truyền this vào

  3. #3
    Ngày gia nhập
    03 2010
    Bài viết
    72

    Bạn ơi Sevre của mình khi mỗi client vào thì tạo một new ClientThread.Trong đó CLientThread là class của form Server.Trong lớp này khi khởi tạo sẽ tạo một thread xử lí cho mỗi client.Mình muốn xây dựng phương thức CapNhatBanDo cho class ThreadCLient để trong phương thức xử lý cho từng client có thể gọi CapNhatBanDo để chỉnh thuộc tính trên form Server.

  4. #4
    Ngày gia nhập
    03 2010
    Bài viết
    72

    Code:
    namespace GameServer
    {
        class ThreadClient
        {
            private Socket client;
            public ThreadClient(Socket newclient)
            {
                client = newclient;
                NetworkStream ns = new NetworkStream(client);
                StreamReader sr = new StreamReader(ns);
                StreamWriter sw = new StreamWriter(ns);
    }
     public void CapNhatBanDo(int x, int y)
            {
                string s = "btt" + x.ToString() + "_" + y.ToString();
                
                foreach (Control a in Server.Controls)
                {
                    if(a!=null)
                    if (a.Name.Equals(s) == true)
                        a.BackColor = Color.Red;
                }
            }
    Ý mình là mỗi client có một thread xử lý bằng lớp ThreadClient.Trong lúc xử lý cho từng client mình cần truy xuất đến các button trong form Server
    Mong mọi người giúp đỡ!

  5. #5
    Ngày gia nhập
    09 2011
    Bài viết
    23

    cái này mình không biết nên không biết trả lời thế nào.cách hay nhất là dùng gôgle
    thân MD5

  6. #6
    Ngày gia nhập
    03 2010
    Bài viết
    72

    Mặc định làm sao cho một class truy cập vào các thuộc tính control trong Form

    minh co serach nhieu roi nhung khong ra ban oi! Xin loimay khong go dau duoc

  7. #7
    Ngày gia nhập
    10 2010
    Nơi ở
    Đà Nẵng
    Bài viết
    10

    Mình biết vấn đề của bạn.
    Lỗi xảy ra là do nhiều thread đang cùng access vào một đối tượng.
    Hiện tại lập trình winform trên .Net chỉ hỗ trợ cho lập trình đơn thread (winform có giao diện và sự thao tác của người dùng bên ngoài nên rất khó control). Nếu bạn muốn sử dụng đa thread thì phải set thuộc tính gì gì đó STAThread thành MTAThread và cái này thì bạn phải tự đảm bào code của mình khỏi các lỗi runtime vì .Net ko hỗ trợ. (quá bờ rào rồi)
    Cách xử lý trong trường hợp này là bạn nên cho các thread client gọi vào phương thức thao tác lên form server bằng chính thread create của form Server. (check bằng InvokeRequired)
    Cách làm thì bạn sẽ sử dụng method Invoke vào phương thức trong form.
    Bạn nên tự tìm hiểu thêm về multithread, vì khó có thể hướng dẫn bạn tránh hết các lỗi được.

  8. #8
    Ngày gia nhập
    03 2010
    Bài viết
    72

    bạn ơi, chương trình mình khi chạy không báo lỗi mà mình chỉ muốn từ lớp ThreadClient có thể truy cập vào thuộc tính Control của form Server thôi
    Mình cũng tính cho form Server có phương thức Static là CapNhaBanDo nhu sau
    Code:
    static public void CapNhatBanDo(int x, int y)
    {
    string s="btt"+x.ToString()+y.ToString();
    foreach(Control a in this.Controls)
    {
    if(a.Name.Equals(s))
    s.BkColor=Color.Red;
    }
    }
    Như vầy thì trong lớp ThreadClieent có thể gọi Server.CapNhatBanDo nhưng làm như vầy thì không dùng this trong phương thức static của Server được
    Mong mọi người giúp đỡ vì mới nảy ra ý tưởng này mà chưa làm được nữa

  9. #9
    Ngày gia nhập
    03 2010
    Bài viết
    72

    mình giải quyết được rồi! Xin phép đóng topic lại nha.Cảm ơn moi nguoi đã giúp đỡ

Các đề tài tương tự

  1. Cách truy xuất đến thuộc tính của control được tạo động?
    Gửi bởi kid_1412 trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 4
    Bài viết cuối: 17-12-2012, 06:01 PM
  2. Cách Refresh Form trong 1 hàm thuộc 1 class khác, mà được gọi trong form đó?
    Gửi bởi troy91 trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 2
    Bài viết cuối: 14-04-2012, 10:13 PM
  3. Algorithm Gọi CONTROL khi có được thuộc tính Name của Control Trong C#
    Gửi bởi markpq trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 6
    Bài viết cuối: 29-03-2012, 08:22 AM
  4. Làm sao Build đối số là Control thuộc window.Form
    Gửi bởi so0_lanhlung trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 3
    Bài viết cuối: 29-06-2010, 02:24 PM
  5. Cách truy cập đối tượng trên Form từ class khác trong C#?
    Gửi bởi who_am_i trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 4
    Bài viết cuối: 09-12-2008, 09:52 AM

Quyền hạn của bạn

  • Bạn không thể gửi đề tài mới
  • Bạn không thể gửi bài trả lời
  • Bạn không thể gửi các đính kèm
  • Bạn không thể chỉnh sửa bài viết của bạn