PDA

View Full Version : T__T Mình cần trợ giúp về kỹ thuật lap trình C#



lich
21-09-2005, 00:53
Hiện tại mình đang làm project cho trường, yếu cầu là viết = cái quái gì cũng được nhưng phải chấm dứt quan hệ với em "console" T__T
Và thế là mình chọn C# cho đồ án của mình. Khổ cái là mình mới chân ướt chân ráo, chuyển từ C++ qua cái C# này (thấy chung chữ C tưởng ngon ăn lắm) nên có 1 số vấn đề thắc mắt không thể giải đáp nổi (hix, sức lừa (ý lộn, sức người) có hạn) nêu lên để ai đó có trình độ + kinh nghiệm ra tay cứu vớt:
_Vấn đề đầu tiên: cái #define không làm việc tạo Macro nữa hix hix, kinh hoàng bây giờ muốn tạo Macro phải xài enum khai báo public trong namespace và ngoài class, mình code như sau:


namespace ColorTest
{
public enum COLOR{RED,GREEN,BLUE,BLACK,WHITE};
public class TestOnly
{
...
}
}

<-- Không tự nhiên 1 tý nào hết (mạc dù trong .Net đã có struct Color nhưng mình không dùng mục đích vẽ nên không xài nó, và để tiện cho việc tính toán sau này nữa, mình muốn giá trị của các màu là 1 giá trị nguyên (ví như lập trình tạo RED-BLACK TREE đó)), vậy theo cao kiến của mấy bạn mình phải làm sao đây? (mình không khoái xài trường public tí nào)

Vấn đề thứ hai: khi 1 form cha gọi 1 form con thì tất cả các thành phần dữ liệu trong form cha form con không truy xuất được phải làm sao đây?


{
...
frmSubForm mySubForm = new frmSubForm();
mySubForm.ShowDialog();
//po tay, khong lam tiep duoc nua vi khong the truy xuat cac thanh phan cua
//form cha T__T
...
}


Rất mong nhận được lời giúp đỡ của các bạn.

Vinhie47
21-09-2005, 07:30
2. Khai báo như sau:
public class form_parent:System.Windows.Forms.Form
{
public form_parent parent=new form_parent();
form_child child;//form_child là tên của class form con
...................
//ở static void Main():
Application.Run(parent);
.................
}
Khi đó trong form con (child) bạn có thể can thiệp vào form cha (parent) bình thường

HITALF
21-09-2005, 11:06
1> Mình thấy việc sử dụng enum như vậy là rất bình thường, ko có gì phải sửa cả.
2> Nếu 2 class của bạn có quan hệ cha con thì bạn chỉ cần thừa kế như vinhie47 thì class con sẽ có thể sử dụng class cha như bình thường, nếu cần có thể sử dùng từ khoá base để chỉ class cha. Tuy nhiên, hình như bạn muốn nói ở đây không phải là class thông thường mà là form cha và form con trong đó form cha là form gọi hiển thị form con. Nếu như vậy thì sẽ không có quan hệ cha - con theo OOP ở đây. Và .NET cũng không cho thừa kế với 2 form (window forms) như vậy. Vấn đề ở đây là bạn muốn ở form được gọi (form con) access tới những data có trong form cha, đúng không?
Theo mình thì ở trong form con bạn tạo một variable (ví dụ tên là obj) của form cha, set access permission ở public. Ở form cha khi initialize form con, bạn gán keywork this cho obj. Sau đó thì mở form con lên. Bi giờ khi ở form con bạn có thể sử dụng obj để access và modify data ở trên form cha.

Đây là code example:




//Trong FormCon
public FormCha obj;
===========================================

// Trong Formcha
FormCon myForm = new FormCon();
myForm.obj = this;
myForm.ShowDialog; // or myForm.Show();



Chúc bạn sớm quen với C#.

lich
24-09-2005, 08:49
Cảm ơn các bạn về bài trả lời (Bực thiệt, hôm trước không thể vào diễn đàn, chẳng biết sao nữa chắc lỗi ở đâu đó), mình sẽ save lại để áp dụng thử coi sao. Và đây là vấn đề mới mình vừa gặp trong khi lập trình:


class node
{
private int data;
private node next;
public node NEXT
{
get
{
return next;
}
set
{
next = value;
}
}
....
}
class tree
{
node T;
...
public void addNode(ref node T,int data)
{
...
if (...)
addNode(ref T.NEXT,data); //<-- bao loi, property ko the lam tham so ref T__T
...
}
}

Ack ack, thế này thì chẳng con cách nào khác cả, đành phải cho cái field next thành public để truyền tham số ref đầu vào của hàm đệ quy (field public thì... hình như không được hay ho cho lắm). Vậy giờ ngoài cái cách cho cái field đó thành public còn cách nào khác để truyền ref như trên hay không?

Nói về cái enum mình còn gặp chuyện này nữa: mình không thể + 2 thành phần enum được (define thì vô tư)
VD:


public enum nodeColor{RED,BLACK,DOUBLE_BLACK};
...
nodeColor.RED + nodeColor.BLACK <-- báo lỗi cannot convert


Vậy làm sao giờ, câu lệnh ép kiểu có thực thi không?

mtt333
24-09-2005, 09:00
Hihihi, lần đầu tiên mình thấy một tay C++ lâu ngày quay sang C# lại kêu khó khăn đấy.
Đã thể lại còn nói C# thiếu tự nhiên trong khi nhiều tay quen C# lại bảo thằng C++ rối rắm, thiếu tự nhiên hơn.
Nói thế không phải là trách bạn đâu vì mình kính trọng tất cả những người có lưu luyến, có tình với C++.
Mình chỉ thấy buồn cười thôi.

Trời, không hiểu thế giới lập trình sẽ ra sao nữa.

CrazyBabe
24-09-2005, 21:26
Vì nhìu người dùng C++, nghĩ mình làm OOP nhưng hổng phải, chuyển sang thằng OOP thật thì thấy quấy zậy thui
Với enum thì bạn phải định nghĩa operator cho nó chứ, cộng thô hổng có ngon à :D

lich
25-09-2005, 04:39
Vì nhìu người dùng C++, nghĩ mình làm OOP nhưng hổng phải, chuyển sang thằng OOP thật thì thấy quấy zậy thui
Với enum thì bạn phải định nghĩa operator cho nó chứ, cộng thô hổng có ngon à :D
hix hix bạn đã lỡ vào rồi thì giúp cho nó trót, cho mình cái mẫu viết operator của kiểu enum đi (mới học mà, thông cảm đi mà)
Còn vụ truyền tham số ref cho mấy cái property nữa, có ai biết cách nào đi đường vòng để né nó không? Cho xin chút cao kiến đi mà. (thì coi như đây là 1 cái tut cho newbie đi)


Hihihi, lần đầu tiên mình thấy một tay C++ lâu ngày quay sang C# lại kêu khó khăn đấy.
Đã thể lại còn nói C# thiếu tự nhiên trong khi nhiều tay quen C# lại bảo thằng C++ rối rắm, thiếu tự nhiên hơn.
Nói thế không phải là trách bạn đâu vì mình kính trọng tất cả những người có lưu luyến, có tình với C++.
Mình chỉ thấy buồn cười thôi.

Trời, không hiểu thế giới lập trình sẽ ra sao nữa.
Hix mình chưa bào giờ nghĩ và viết C# thiết tự nhiên cả, mà chính cách viết mã của mình nó gượng ép và thiếu tự nhiên thôi, tự nhiên hay ko không phải là bản thân ngôn ngữ mà nằm ở chính bản thân người lập trình có viết đúng bản chất của ngôn ngữ đó hay không thôi. VD: như cái vụ truyền tham số ref ở trên, mình đã đi đường vòng như sau:


class tree
{
node T;
...
public void addNode(ref node T,int data)
{
...
if (...)
{
node Temp = T.NEXT;
addNode(ref Temp,data);
T.NEXT = Temp;
....
}
}
}
Thiếu tự nhiên là cái chắc, có ai đời đi đệ quy như thế này đâu chứ ^^. Và bởi vì vậy mới nhờ mấy bạn trợ giúp nè, mời những đàn anh đi trước chỉ bảo thêm cho em. (mấy thằng cha dạy thực hành chả dạy quái gì cả, tức muốn nổ đom đóm mắt, hix đành trăm sự nhờ mấy sư huynh thôi đó)

CrazyBabe
26-09-2005, 08:18
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/csspec/html/vclrfcsharpspec_14.asp

itgatevn
26-09-2005, 09:52
Mời bạn xem cái này nhé,
http://www.itgatevn.com/sharing.aspx?u=im&iid=41

lich
27-09-2005, 05:26
Rất cảm ơn sự giúp đỡ của các bạn, mình sẽ cố gắng học tập thêm và có gì mình sẽ xin các bạn hướng dẫn giúp, và 1 lần nữa xin cảm ơn các bạn, những người tử tế đã giúp đỡ mình. Mình tạm dừng topic ở đây, sau này mình sẽ update nó sau bye bye.