Tôi đang sử dụng treeview với ba cấp độ nút, cấp độ thứ hai mà tôi đã đặt không có hộp kiểm sử dụng mã trong this question.TreeNode.Handle không quay trở lại bằng Treeview
Nó hoạt động rất tốt, ngoại trừ hộp kiểm đầu tiên nó gặp bao giờ có hộp kiểm loại bỏ:
Tôi gọi phương thức với mã này đó là sau khi tất cả các dữ liệu có HideCheckBox() được nạp vào treeview:
foreach (TreeNode appNode in trvPermissions.Nodes)
{
foreach (TreeNode secNode in appNode.Nodes)
{
HideCheckBox(trvPermissions, secNode);
}
}
khi tôi bước qua đoạn code có vẻ như node.Handle trả về 0 cho nút đầu tiên nó gặp và đây không phải là một xử lý hợp lệ để sử dụng khi gọi mã để loại bỏ các kiểm tra cái hộp. Oddly đủ, nếu tôi gọi phương pháp để loại bỏ các hộp kiểm hai lần sau đó xử lý được trả lại đúng.
Có ai có thể đề xuất tại sao TreeNode.Handle không trả lại giá trị chính xác không?
EDIT:
Dưới đây là các mã như yêu cầu -
private const int TVIF_STATE = 0x8;
private const int TVIS_STATEIMAGEMASK = 0xF000;
private const int TV_FIRST = 0x1100;
private const int TVM_SETITEM = TV_FIRST + 63;
[StructLayout(LayoutKind.Sequential, Pack = 8, CharSet = CharSet.Auto)]
private struct TVITEM
{
public int mask;
public IntPtr hItem;
public int state;
public int stateMask;
[MarshalAs(UnmanagedType.LPTStr)]
public string lpszText;
public int cchTextMax;
public int iImage;
public int iSelectedImage;
public int cChildren;
public IntPtr lParam;
}
[DllImport("user32.dll", CharSet = CharSet.Auto)]
private static extern IntPtr SendMessage(IntPtr hWnd, int Msg, IntPtr wParam,
ref TVITEM lParam);
/// <summary>
/// Hides the checkbox for the specified node on a TreeView control.
/// </summary>
private void HideCheckBox(TreeView tvw, TreeNode node)
{
TVITEM tvi = new TVITEM();
tvi.hItem = node.Handle;
tvi.mask = TVIF_STATE;
tvi.stateMask = TVIS_STATEIMAGEMASK;
tvi.state = 0;
SendMessage(tvw.Handle, TVM_SETITEM, IntPtr.Zero, ref tvi);
}
bạn có thể hiển thị mã của mình nơi bạn xóa hộp kiểm và gọi nút.Handle không? –
TreeView có hiển thị khi bạn gọi HideCheckBox() không? Tôi có nghĩa là TreeView.Visible được đặt thành true? –