Ein Treffpunkt für C#-Programmierer
Anonymous
So deaktivieren Sie die Textauswahl in einem Treeview (WinForms .net)
Post
by Anonymous » 22 Mar 2025, 02:40
Ich erstelle eine benutzerdefinierte TreeView -Steuerung für meine WinForm -Anwendung. Dabei bemerkte ich, dass es eine wirklich ärgerliche Funktion der Treeview gibt, die ich Schwierigkeiten habe, zu entfernen. Ich nehme jedoch auch keine Zeichnung jeglicher Art an. Ich suche nach einer Möglichkeit, dies zu tun, ohne den Stil auf den Eigentümer festzulegen und den Text der hinzugefügten Knoten manuell zu zeichnen. < /P>
Code: Select all
public class CustomTreeView : TreeView
{
// Fields for the custom checkbox images
private Image _checkedImage = Properties.Resources.CheckIcon;
private Image _uncheckedImage = Properties.Resources.UnCheckIcon;
private Image _intermediateImage = Properties.Resources.IntermediateCheckIcon;
private ImageList _imageList;
public CustomTreeView()
{
this.CheckBoxes = false;
_imageList = new ImageList();
_imageList.ImageSize = new Size(26, 26);
_imageList.Images.Add("Unchecked", _uncheckedImage);
_imageList.Images.Add("Checked", _checkedImage);
_imageList.Images.Add("Intermediate", _intermediateImage);
this.ImageList = _imageList;
this.Font = new Font("Gadugi", 12f);
this.ForeColor = Color.DodgerBlue;
this.BackColor = SystemColors.Control;
this.BorderStyle = BorderStyle.None;
this.Scrollable = true;
this.ShowLines = false;
this.ShowRootLines = false;
this.ShowNodeToolTips = true;
this.ShowPlusMinus = false;
this.HideSelection = false;
this.ItemHeight = 30;
}
private int GetEffectiveState(TreeNode node)
{
if (node.Nodes.Count == 0)
{
return node.Checked ? 1 : 0;
}
else
{
bool allChecked = true;
bool anyChecked = false;
foreach (TreeNode child in node.Nodes)
{
int childState = GetEffectiveState(child);
if (childState == 0)
allChecked = false;
else if (childState == 1)
anyChecked = true;
else
{
allChecked = false;
anyChecked = true;
}
}
if (allChecked)
return 1;
else if (anyChecked)
return 2;
else
return 0;
}
}
private void UpdateStateImageIndex(TreeNode node)
{
node.ImageIndex = GetEffectiveState(node);
node.SelectedImageIndex = node.ImageIndex;
}
private void SetNodeChecked(TreeNode node, bool checkedState)
{
node.Checked = checkedState;
foreach (TreeNode child in node.Nodes)
{
SetNodeChecked(child, checkedState);
}
}
private void UpdateStateIndices(TreeNode node)
{
while (node != null)
{
UpdateStateImageIndex(node);
node = node.Parent;
}
}
protected override void OnMouseDown(MouseEventArgs e)
{
TreeViewHitTestInfo hitTestInfo = HitTest(e.Location);
if (hitTestInfo.Location == TreeViewHitTestLocations.Image)
{
TreeNode node = hitTestInfo.Node;
if (node != null)
{
int currentState = GetEffectiveState(node);
if (currentState == 1)
{
SetNodeChecked(node, false);
}
else
{
SetNodeChecked(node, true);
}
UpdateStateIndices(node);
}
}
}
protected override void OnMouseMove(MouseEventArgs e)
{
base.OnMouseMove(e);
TreeViewHitTestInfo hitTestInfo = HitTest(e.Location);
if (hitTestInfo.Location == TreeViewHitTestLocations.Image)
{
this.Cursor = Cursors.Hand;
}
else
{
this.Cursor = Cursors.Default;
}
}
protected override void OnAfterCheck(TreeViewEventArgs e)
{
base.OnAfterCheck(e);
UpdateStateIndices(e.Node);
}
private void UpdateStateIndicesRecursive(TreeNode node)
{
node.Expand();
foreach (TreeNode child in node.Nodes)
{
UpdateStateIndicesRecursive(child);
}
UpdateStateImageIndex(node);
}
public void UpdateAllStateIndices()
{
foreach (TreeNode node in this.Nodes)
{
UpdateStateIndicesRecursive(node);
}
}
protected override void OnBeforeCollapse(TreeViewCancelEventArgs e)
{
e.Cancel = true;
}
protected override void OnKeyDown(KeyEventArgs e)
{
if (e.KeyCode == Keys.Up || e.KeyCode == Keys.Down || e.KeyCode == Keys.Left || e.KeyCode == Keys.Right)
{
e.Handled = true;
}
base.OnKeyDown(e);
}
protected override void OnBeforeSelect(TreeViewCancelEventArgs e)
{
e.Cancel = true;
base.OnBeforeSelect(e);
}
}
1742607642
Anonymous
Ich erstelle eine benutzerdefinierte TreeView -Steuerung für meine WinForm -Anwendung. Dabei bemerkte ich, dass es eine wirklich ärgerliche Funktion der Treeview gibt, die ich Schwierigkeiten habe, zu entfernen. Ich nehme jedoch auch keine Zeichnung jeglicher Art an. Ich suche nach einer Möglichkeit, dies zu tun, ohne den Stil auf den Eigentümer festzulegen und den Text der hinzugefügten Knoten manuell zu zeichnen. < /P> [code]public class CustomTreeView : TreeView { // Fields for the custom checkbox images private Image _checkedImage = Properties.Resources.CheckIcon; private Image _uncheckedImage = Properties.Resources.UnCheckIcon; private Image _intermediateImage = Properties.Resources.IntermediateCheckIcon; private ImageList _imageList; public CustomTreeView() { this.CheckBoxes = false; _imageList = new ImageList(); _imageList.ImageSize = new Size(26, 26); _imageList.Images.Add("Unchecked", _uncheckedImage); _imageList.Images.Add("Checked", _checkedImage); _imageList.Images.Add("Intermediate", _intermediateImage); this.ImageList = _imageList; this.Font = new Font("Gadugi", 12f); this.ForeColor = Color.DodgerBlue; this.BackColor = SystemColors.Control; this.BorderStyle = BorderStyle.None; this.Scrollable = true; this.ShowLines = false; this.ShowRootLines = false; this.ShowNodeToolTips = true; this.ShowPlusMinus = false; this.HideSelection = false; this.ItemHeight = 30; } private int GetEffectiveState(TreeNode node) { if (node.Nodes.Count == 0) { return node.Checked ? 1 : 0; } else { bool allChecked = true; bool anyChecked = false; foreach (TreeNode child in node.Nodes) { int childState = GetEffectiveState(child); if (childState == 0) allChecked = false; else if (childState == 1) anyChecked = true; else { allChecked = false; anyChecked = true; } } if (allChecked) return 1; else if (anyChecked) return 2; else return 0; } } private void UpdateStateImageIndex(TreeNode node) { node.ImageIndex = GetEffectiveState(node); node.SelectedImageIndex = node.ImageIndex; } private void SetNodeChecked(TreeNode node, bool checkedState) { node.Checked = checkedState; foreach (TreeNode child in node.Nodes) { SetNodeChecked(child, checkedState); } } private void UpdateStateIndices(TreeNode node) { while (node != null) { UpdateStateImageIndex(node); node = node.Parent; } } protected override void OnMouseDown(MouseEventArgs e) { TreeViewHitTestInfo hitTestInfo = HitTest(e.Location); if (hitTestInfo.Location == TreeViewHitTestLocations.Image) { TreeNode node = hitTestInfo.Node; if (node != null) { int currentState = GetEffectiveState(node); if (currentState == 1) { SetNodeChecked(node, false); } else { SetNodeChecked(node, true); } UpdateStateIndices(node); } } } protected override void OnMouseMove(MouseEventArgs e) { base.OnMouseMove(e); TreeViewHitTestInfo hitTestInfo = HitTest(e.Location); if (hitTestInfo.Location == TreeViewHitTestLocations.Image) { this.Cursor = Cursors.Hand; } else { this.Cursor = Cursors.Default; } } protected override void OnAfterCheck(TreeViewEventArgs e) { base.OnAfterCheck(e); UpdateStateIndices(e.Node); } private void UpdateStateIndicesRecursive(TreeNode node) { node.Expand(); foreach (TreeNode child in node.Nodes) { UpdateStateIndicesRecursive(child); } UpdateStateImageIndex(node); } public void UpdateAllStateIndices() { foreach (TreeNode node in this.Nodes) { UpdateStateIndicesRecursive(node); } } protected override void OnBeforeCollapse(TreeViewCancelEventArgs e) { e.Cancel = true; } protected override void OnKeyDown(KeyEventArgs e) { if (e.KeyCode == Keys.Up || e.KeyCode == Keys.Down || e.KeyCode == Keys.Left || e.KeyCode == Keys.Right) { e.Handled = true; } base.OnKeyDown(e); } protected override void OnBeforeSelect(TreeViewCancelEventArgs e) { e.Cancel = true; base.OnBeforeSelect(e); } } [/code]
0 Replies
9 Views
Last post by Anonymous
12 Jul 2025, 22:44
0 Replies
8 Views
Last post by Anonymous
26 Aug 2025, 10:52
UITextView deaktiviert die Textauswahl
by
Guest »
05 Jan 2025, 05:39 » in
IOS
Es fällt mir schwer, die UITextView dazu zu bringen, die Auswahl des Textes zu deaktivieren.
Ich habe versucht:
canCancelContentTouches = YES;
Ich habe versucht, Unterklassen zu erstellen und zu...
0 Replies
21 Views
Last post by Guest
05 Jan 2025, 05:39
0 Replies
10 Views
Last post by Anonymous
21 May 2025, 14:03
Textauswahl mit gierig und zurückhaltend
by
Anonymous »
17 Oct 2025, 13:07 » in
Python
Ich versuche, Text zwischen Markierungen zu extrahieren. Aber diese Markierungen sind Wortmarker und wiederholen sich häufig. Eingabe sind EDGAR TXT-Dateien.
Meine Markierungen bestehen aus einer...
0 Replies
1 Views
Last post by Anonymous
17 Oct 2025, 13:07