をチェックボックスを削除しますいない。 チェックボックスを外してイメージとラインをそこに置くにはどうすればいいですか?あなたはあなたは、単にシステムを許可している、その種類のタイプの残りの部分については5または6のいずれかであるすべてのノードのために自分自身を描画処理している、示されたコードでツリービュー私はNode.Typeが、私はこのコードを使用して5または6であるチェックボックスを削除したいいくつかのノードで
答えて
ノードをデフォルトの方法で描画します。そういうわけで、彼らはすべて期待通りのラインを持っていますが、あなたが所有しているものは描画していません。ラインに描画するのを忘れました!あなたは、あなたがe.DrawDefault = false;
と言うとき、それがあなたが本当にそれを意味すると仮定しているのを見ます。標準線を含む通常の描画は行われません。
あなたはその行を自分で描く必要があります。または、オーナー描画なしでどうやって得るかを理解する必要があります。
あなたが今持っているコードから、システムのネイティブ描画スタイルをオーナー描画コードでできるだけシミュレートしようとしているように見えます。オーナー描画によって正確に何が達成されたのかはわかりません最初はタイプ5と6のノード(行のように、描画していないため単純に描画されていないタイプ)に対してチェックボックスが表示されないようにしようとしているのであれば、所有者を関与させることなく簡単に行うことができますお絵かき。
個々のノードのチェックボックスを非表示にする簡単な方法は何ですか?さて、実際にはTreeView
コントロール自体がこれをサポートしていますが、その機能は.NET Frameworkでは公開されていません。 P/Invokeを呼び出してWindows APIを呼び出す必要があります。 (あなたがSystem.Runtime.InteropServices
ためusing
宣言を追加したことを確認してください)フォームクラスに次のコードを追加します。上部の
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);
}
厄介なもののすべては、あなたのP /呼び出し宣言されています。ツリービュー項目の属性を記述するTVITEM
structureと、SendMessage
functionといういくつかの定数が必要です。一番下には、その行為を行うために実際に呼び出す関数(HideCheckBox
)があります。 TreeView
コントロールと、チェックマークを削除する特定のTreeNode
アイテムを渡します。
@Werewolve:まあ、おそらく私はそれが「もっと簡単である」ことを忘れていました。私は個人的には、私はそれに精通しているので、所有者の描画が右に行くことは難しいので、より簡単だと思う。基本的に、TreeViewコントロール自体は個々のノードのチェックボックスを隠すことをサポートしていますが、その機能は.NET Frameworkでは公開されていません。あなたはそれを得るためにP/Invokeする必要があります。あなたが望むなら、私は答えをcodezで更新します。 –
@Charith:はい、owner-drawを超えています(関係する作業とネイティブのTreeViewコントロールのように見える/動作しないので、どちらもしたくないと確信しています)。それをやる。ネイティブのWin32 APIから関数を呼び出すためにP/Invokeを使用しているため、奇妙で複雑なように見えますが、それはそれに関する奇妙な部分です。 CまたはC++のプログラマがこれを行う方法とまったく同じです。何かを起こすには奇妙な.NETの規約は必要ありません。しかし、P/Invokeの使用について心配するべきではありません。なぜなら、理由のためにフレームワークに組み込まれているからです。 –
このコードの障害モードの解決方法を確認するには、次の回答を確認してください。http://stackoverflow.com/questions/7308238/treeview-problem-with-treenode-handle-not-returning/7308950#7308950 –
これは非常に良いです:
は、だから、このようなものを取得するには子ノードのそれぞれからチェックマークを削除することができます!私が行う唯一の修正は、の方法ではTreeView
ではなく、TreeNode
だけを渡すことです。 TreeView
はTreeNode
自体から取り出すことができる。
TreeView tvw = node.TreeView;
TreeViewExtensionsを使用します。
使用サンプル:ここに
private void MyForm_Load(object sender, EventArgs e)
{
this.treeview1.DrawMode = TreeViewDrawMode.OwnerDrawText;
this.treeview1.DrawNode += new DrawTreeNodeEventHandler(arbolDependencias_DrawNode);
}
void treeview1_DrawNode(object sender, DrawTreeNodeEventArgs e)
{
if (e.Node.Level == 1) e.Node.HideCheckBox();
e.DrawDefault = true;
}
は、あなたが行うことができ、これを使用して、拡張メソッドなどの答えのコードです:[私はownerdrawnツリービュー上での優れたリソースを探していますの
public static class TreeViewExtensions
{
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>
public static void HideCheckBox(this TreeNode node)
{
TVITEM tvi = new TVITEM();
tvi.hItem = node.Handle;
tvi.mask = TVIF_STATE;
tvi.stateMask = TVIS_STATEIMAGEMASK;
tvi.state = 0;
SendMessage(node.TreeView.Handle, TVM_SETITEM, IntPtr.Zero, ref tvi);
}
}
- 1. NGX-ツリービューのチェックボックス私はこのコードを使用するデフォルト
- 2. 削除影が、私はいつもScatterViewItemから影を削除するには、このコードを使用し
- 3. は、私はこれは私が使用していますし、それが1から除くすべてのシナリオのために正常に動作しているコードであるASP.NET</p> <p>でクッキーを削除したい
- 4. 以下は、私が使用していたコードであるelasticSearch
- 5. これは私が使用してきたコードである
- 6. 私はこのコードを使用してツリービューが取り込まれているどのようにツリービュー
- 7. のRewriteRuleは、私はこれは私が使用したコードである
- 8. 私はノードJSコードに続く使用して、いくつかのJSONテキストを暗号化してきたGolang
- 9. は、私は5つのまたは6オンラインYAMLパーサを試してみた
- 10. 私はこのコードを使用してきましたし、私は2つの機能を追加するためにいくつかの助けが必要
- 11. Hadoopのマップ削減は、私はJavaコードをマップ-削減し、私はメモリヒープサイズを定義することで次の行を使用していた私のJavaコード
- 12. は今、私はこのコードを使用していたフォルダ
- 13. は、私はこのコードを使用していた
- 14. が、私はこのコードでエラーを得たクラス名のツリービュー
- 15. は、私はこのコードでQTを削除しようとしているqsqlquery
- 16. 私の活動から、私は私が私が開始または私はいつでも停止することができますサービスを持っているとputExtrasを(使用して、いくつかの余分な物を渡すためにONSTART()コマンドを使用して、ここでいくつかの助けが必要
- 17. このコードを説明してください私はインターネットで私に見つかりましたか?
- 18. SPARQLクエリのエラーを削除します。EOFを私はこのクエリを使用して、いくつかのトリプルを削除しようとしている
- 19. JSONデータが、私はこのコードを使用してangularjsテーブルから行を削除しています
- 20. 削除リボンが、私は成功したコード行を使用して起動時にリボンを削除したVBA
- 21. プログラムで私は、ホームスクリーンから削除アイコンは、このコードを使用していますアンドロイド
- 22. のPostgresを使用して、私はしたいここで、クエリ
- 23. ノード、モンゴ、Mongoos - 彼らは私がリモートデータベースを使用すると、いつでも私はレコードを更新または削除していますシンプルなTODO MEANアプリケーションを使用している間、私は奇妙な問題に直面しています
- 24. は、私は、Windows 7上でサーバーを使用してWAMP Zendのフレームワークをインストールしたいが、私はエラーではありませんいくつかのエラー
- 25. 私はSimpleHTTPServerを使用して、私のコードはここでエラー
- 26. 私はWooCommerceを使用していると私はこのコードを使用してきた特定の製品
- 27. は、チェックボックスの値を取得し、私はこのようないくつかのコードを持っている
- 28. 私はユーザーが5つの数字を入力し、コードが5番目の数字を削除するコードを作成しようとしています。私のコードで何が間違っていますか?ここ
- 29. 私はNPMでファイルを作成したいが、それはすでにこれは私が使用していたコードである
- 30. でViewbagを渡すためにどのようにこれは私が使用していたコードである
可能重複](http://stackoverflow.com/questions/4179522/i-am-looking-for-a-good-resource-on-ownerdrawn-treeviews) –
私はHansに同意します。所有者引き分けは一般的に困難です。あなたが主張するならば、私は[この質問]への回答として与えられたオーナー描画ツリービューのより完全なサンプルを見つけました(http://stackoverflow.com/questions/1003459/c-treeview-owner-drawing-with-ownerdrawtext- and-the-weird-black-highlighting-wh/1004087)、ノードラインがあります。 –