PDA

View Full Version : Cho hỏi về hiện ContexMenuStrip



jackson_to
23-05-2009, 22:37
Chào các bạn.
Cho mình hỏi vấn đề sau đây
Trong ContextMenuStrip gồm có: View, Copy, Cut, Delete, New.
Và mình muốn là khi rightclick vào các Items trong listView thì ContextMenuStrip chi hiện ra: Copy, Cut, Delete.
Còn khi rightclick vào bên ngoài các Items thì nó chỉ hiện ra: View, New.
Bạn nào biết chỉ giùm mình nha.
Thanks in advance.

serivn
23-05-2009, 23:33
Chào các bạn.
Cho mình hỏi vấn đề sau đây
Trong ContextMenuStrip gồm có: View, Copy, Cut, Delete, New.
Và mình muốn là khi rightclick vào các Items trong listView thì ContextMenuStrip chi hiện ra: Copy, Cut, Delete.
Còn khi rightclick vào bên ngoài các Items thì nó chỉ hiện ra: View, New.
Bạn nào biết chỉ giùm mình nha.
Thanks in advance.

Bạn tạo thêm một cái ContextMenu khác chỉ có bây nhiêu button thôi, còn sự kiện thì bạn trỏ cho nó thực thi với phuơng thức đã khai báo trong ContextMenu cũ của bạn-->very simple!! :)

doanhkisi
24-05-2009, 22:51
nhưng vấn đề là làm sao để mà nhận bjt đc khj nào thj` hjen cái menu đó ra
mjnh đã làm và bắt từng sự kjen cho nó nhưng ko đc nó gặp các lỗi sau
1 khj nhấn vào các item trước thj` nó hjen ra đúng menu nhưng khj nhấn ra các chỗ ko có menu thj` ko hjen ra menu # tuy rằng đã bắt sự kjen
2 khj nhấn vào chỗ ko có items nào thj` nó hjen đúng nhưng khj chj? vào các item xong kjck ra chỗ ko có item thj` nó lại bj như ở trên (1)
bạn nào có code xử lí đoạn đó cho mjnh với

serivn
25-05-2009, 06:53
nhưng vấn đề là làm sao để mà nhận bjt đc khj nào thj` hjen cái menu đó ra
mjnh đã làm và bắt từng sự kjen cho nó nhưng ko đc nó gặp các lỗi sau
1 khj nhấn vào các item trước thj` nó hjen ra đúng menu nhưng khj nhấn ra các chỗ ko có menu thj` ko hjen ra menu # tuy rằng đã bắt sự kjen
2 khj nhấn vào chỗ ko có items nào thj` nó hjen đúng nhưng khj chj? vào các item xong kjck ra chỗ ko có item thj` nó lại bj như ở trên (1)
bạn nào có code xử lí đoạn đó cho mjnh với

Thứ nhất là bạn nói làm mình thấy khó hiểu quá...!!
Còn về việc làm sao để xác định ContextMenu nào cho Control nào thì đơn giản thôi mà. Mỗi khi bạn tạo ra một ContextMenu thì nó sẽ có một định danh riêng (Name), và muốn cái ContextMenu đó được hiển thị khi phải chuột lên control nào thì trong cửa sổ properties của Control đó, trong phần ContextMenu bạn chỉ cần chọn cái menu mà bạn muốn cho nó hiển thị, rất đơn giản vậy mà. Mình không rõ bạn đã làm như thế nào, xong bạn làm thử theo những gì mình nói ở trên, rất dễ dàng :)

Chúc thành công!
Thân!

doanhkisi
25-05-2009, 21:10
vấn đề này bạn vẫn chưa hỉu ý mjnh` roài việc gắn menu cho 1 điều khjen thj` quá dễ dàng roài vậy mjnh sẽ nói rõ hơn để bạn hỉu nhá

mjnh đang có 1 listview để chưa kết quả tìm kiếm vj' dụ list hiển thj đc 10 kết quả (>10 kq sẽ có thanh cuộn )
nhưng kết quả tìm đc có 6 kết quả thôi --> còn 4 hàng của list chưa có DL để hiển thj cái mjnh muốn là khj mjnh` kick vào đoạn trống chưa hiển thj DL đó thj` nó phải hjen ra 1 menu khác chứ ko phải hiển thj cái menu khj bạn kjck vào hàng có DL
mjnh đã dùng đoạn code sau để sử lí nhưng vẫn chưa đc các bạn cho mjnh giải pháp với nhé
private void listketqua_MouseUp(object sender, MouseEventArgs e)
{
if (e.Button == MouseButtons.Right)
{
try
{
for (int i = 0; i < listketqua.FocusedItem.SubItems.Count;i++ )
if (listketqua.FocusedItem.SubItems[0].Text != "")
{
listketqua.ContextMenuStrip = contextMenuStrip1;
break;
}
else
listketqua.ContextMenuStrip = contextMenuStrip3;
}
catch (Exception ex) { }
}
}

trinhdiep
26-05-2009, 05:27
minh nghi thay vi gan truc tiep. ban tao doi tuong contextmenu roi show no ra thi hay hon.
về nguyên tắc nếu thằng con không có contextmenustrip thì hiện của thằng cha nó.

doanhkisi
26-05-2009, 22:26
mjnh chưa hỉu ý bạn lắm ban có demo nào ko cho mjnh xjn với

dq_ninh
26-05-2009, 23:50
vấn đề này bạn vẫn chưa hỉu ý mjnh` roài việc gắn menu cho 1 điều khjen thj` quá dễ dàng roài vậy mjnh sẽ nói rõ hơn để bạn hỉu nhá

mjnh đang có 1 listview để chưa kết quả tìm kiếm vj' dụ list hiển thj đc 10 kết quả (>10 kq sẽ có thanh cuộn )
nhưng kết quả tìm đc có 6 kết quả thôi --> còn 4 hàng của list chưa có DL để hiển thj cái mjnh muốn là khj mjnh` kick vào đoạn trống chưa hiển thj DL đó thj` nó phải hjen ra 1 menu khác chứ ko phải hiển thj cái menu khj bạn kjck vào hàng có DL
mjnh đã dùng đoạn code sau để sử lí nhưng vẫn chưa đc các bạn cho mjnh giải pháp với nhé
private void listketqua_MouseUp(object sender, MouseEventArgs e)
{
if (e.Button == MouseButtons.Right)
{
try
{
for (int i = 0; i < listketqua.FocusedItem.SubItems.Count;i++ )
if (listketqua.FocusedItem.SubItems[0].Text != "")
{
listketqua.ContextMenuStrip = contextMenuStrip1;
break;
}
else
listketqua.ContextMenuStrip = contextMenuStrip3;
}
catch (Exception ex) { }
}
}


Cách bạn muốn làm thì quá dễ thôi. Bạn cần có hai cái context menu. Dùng CellClick để lấy right click. Sau đó, kiểm tra dữ liệu của cell để biết phải hiển thị cái menu nào.

Tuy nhiên, cách bạn muốn làm phạm vào ĐẠI KỴ của UI. Một lập trình tốt không bao giờ làm như vậy. Nên nhớ kỹ, 90% người xử dụng của một lập trình không phải là những chuyên gia về IT. Cùng một thao tác trên cùng một cấu trình (control), mà lúc thì hiển thị menu A, lúc thì hiển thị menu B là điều tối kỵ. Nếu bạn viết lập trình thuê cho một công ty ngoại quốc, thì tôi có thể bảo đảm rằng, bạn vừa cho họ xem hai cái menu của bạn, họ lập tức gạch mực đỏ lên tại chỗ.

Trong trường hợp này, bạn chỉ nên hiển thị một menu có tất cả những items của cả hai menus. Nhưng những item nào không được dùng, thì disable cái item đó.

doanhkisi
27-05-2009, 15:40
hjc cái này mjnh thấy ava find nó làm mờ mjn chi học theo nó thui