
A 回答 (3件)
- 最新から表示
- 回答順に表示
No.3
- 回答日時:
private void treeView1_MouseMove(object sender, MouseEventArgs e)
{
TreeNode clickedNode = treeView1.GetNodeAt(e.X, e.Y);
if (e.Button == MouseButtons.Left && allowLine == false)
{
allowLine = true;
if (this.VisibleDraggedNodeLabel == true)
{
motionLabel.Visible = true;
}
}
if (allowLine == true)
{
//motionLabel.Location = Cursor.Position;
Point client = treeView1.PointToClient(Cursor.Position);
if (clickedNode != null && this.VisibleDraggedNodeLabel==true)
{
motionLabel.Location = new Point(treeView1.Bounds.X+clickedNode.Bounds.X+(clickedNode.Bounds.Width/2),
treeView1.Bounds.Y+clickedNode.Bounds.Y+(clickedNode.Bounds.Height/2));
}
treeView1.Invalidate();
}
}
}
TreeViewクラス、TreeNodeクラス、TreeNode.DrawModeプロパティのヘルプを参考になさってください。
No.2
- 回答日時:
(承前)
private void treeView1_MouseDown(object sender, MouseEventArgs e)
{
treeView1.Capture = true;
TreeNode clickedNode = treeView1.GetNodeAt(e.X, e.Y);
if (clickedNode != null)
{
if (NodeBounds(clickedNode).Contains(e.X, e.Y))
{
treeView1.SelectedNode = clickedNode;
if (this.VisibleDraggedNodeLabel == true) motionLabel.Text = clickedNode.Text;
}
}
}
private void treeView1_DrawNode(object sender, DrawTreeNodeEventArgs e)
{
drawcount++;
this.Text = drawcount.ToString() + " " + e.State;
// Draw the background and node text for a selected node.
if ((e.State & TreeNodeStates.Selected) != 0)
{
e.Graphics.FillRectangle(Brushes.Green, NodeBounds(e.Node));
Font nodeFont = e.Node.NodeFont;
if (nodeFont == null) nodeFont = ((TreeView)sender).Font;
// Draw the node text.
e.Graphics.DrawString(e.Node.Text, nodeFont, Brushes.White,
e.Node.Bounds.X + 2, e.Node.Bounds.Y);
using (Pen focusPen = new Pen(Color.Black))
{
focusPen.DashStyle = System.Drawing.Drawing2D.DashStyle.Dot;
Rectangle focusBounds = NodeBounds(e.Node);
focusBounds.Size = new Size(focusBounds.Width - 1,
focusBounds.Height - 1);
e.Graphics.DrawRectangle(focusPen, focusBounds);
}
}
else
{// Use the default background and node text.
e.DrawDefault = true;
}
if (allowLine == true)
{
Graphics g = e.Graphics;
Point client = treeView1.PointToClient(Cursor.Position);
TreeNode clickedNode = treeView1.GetNodeAt(client);
if (clickedNode != null)
{
int x = treeView1.Width;
int y = clickedNode.Bounds.Y;
//g.DrawArc(pen, -4, y - 4, 8, 8, 0, 360);
g.FillPolygon(Brushes.Black, new Point[]{new Point(0+5,y-4),
new Point(0+5,y+4),
new Point(4+5,y)});
g.DrawLine(pen, 3 + 5, y, x - 3 - 5, y); //y = clickedNode.bound.y
g.FillPolygon(Brushes.Black, new Point[]{new Point(x-5,y-4),
new Point(x-5,y+4),
new Point(x-4-5,y)});
}
}
// If a node tag is present, draw its string representation
// to the right of the label text.
if (e.Node.Tag != null)
{
e.Graphics.DrawString(e.Node.Tag.ToString(), tagFont,
Brushes.Yellow, e.Bounds.Right + 2, e.Bounds.Top);
}
// If the node has focus, draw the focus rectangle large, making
// it large enough to include the text of the node tag, if present.
if (((e.State & TreeNodeStates.Focused) != 0) ||
(e.State & TreeNodeStates.Selected) != 0)
{
using (Pen focusPen = new Pen(Color.Black))
{
focusPen.DashStyle = System.Drawing.Drawing2D.DashStyle.Dot;
Rectangle focusBounds = NodeBounds(e.Node);
focusBounds.Size = new Size(focusBounds.Width - 1,
focusBounds.Height - 1);
e.Graphics.DrawRectangle(focusPen, focusBounds);
}
}
}
private Rectangle NodeBounds(TreeNode node)
{
// Set the return value to the normal node bounds.
Rectangle bounds = node.Bounds;
if (node.Tag != null)
{
// Retrieve a Graphics object from the TreeView handle
// and use it to calculate the display width of the tag.
Graphics g = treeView1.CreateGraphics();
int tagWidth = (int)g.MeasureString
(node.Tag.ToString(), tagFont).Width + 6;
// Adjust the node bounds using the calculated value.
bounds.Offset(tagWidth/2, 0);
bounds = Rectangle.Inflate(bounds, tagWidth/2, 0);
g.Dispose();
}
return bounds;
}
No.1
- 回答日時:
VB.netの環境がなく、C#で申し訳ありませんが…。
treeView1と、motionLabel(Label)を配置します。
treeView.DrawModeは、OwnerDrawTextとします。
VisibleDraggedNodeLabelがTrueの場合はドラッグ時にドラッグをしているノード名がmotionLabelに表示されます。不要ならばfalse。
TreeViewの描画はDrawNode内部で。コンポーネントの操作や再描画契機(Invalidate)の発行はMouseXXXイベントで行なっています。
この事例では、ノード間のドラッグアンドドロップに対応しており、アイコンなどを外側からドラッグしてくる状況を考える場合にはイベントなどを考慮する必要があります。
public partial class Form1 : Form
{
int drawcount = 0;
private bool allowLine = false;
Pen pen;
//Graphics g = null;
Font tagFont = new Font("Helvetica", 8, FontStyle.Bold);
private bool _visibleMotionLabel = true;
public bool VisibleDraggedNodeLabel{
get
{
return _visibleMotionLabel;
}
set
{
_visibleMotionLabel = value;
}
}
private void Form1_Load(object sender, EventArgs e)
{
allowLine = false;
motionLabel.Location = new Point(-100, 10);
motionLabel.BackColor = Color.Transparent;
this.VisibleDraggedNodeLabel = true;
pen = new Pen(Color.Black, 2);
}
private void treeView1_MouseLeave(object sender, EventArgs e)
{
treeView1.Capture = false;
}
private void treeView1_MouseUp(object sender, MouseEventArgs e)
{
treeView1.Capture = false;
if (allowLine == true)
{
motionLabel.Location = new Point(-100, 10);
motionLabel.Visible = false;
allowLine = false;
}
treeView1.Invalidate();
}
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
javaの掲示板について
-
ORA-01858: 数値を指定する箇所...
-
BOOL値を逆にしたい
-
JSP での exit? (スクリプトか...
-
Stringを返す getText()メソッ...
-
C# ListBoxのインデックスの値...
-
この世で連日正規表現について...
-
C#で実行時にメソッドの返り値...
-
C言語のポインターに関する警告
-
論理演算子”||”またはの入力方法
-
System.err. printlnとSystem.o...
-
「続行するには何かキーを押し...
-
VBAで配列の計算
-
オブジェクトの中のプロパティ...
-
hiddenの値が期待した値で取得...
-
[JAVA]try 内の変数を外で!?
-
Javaで改行などが出来ないのです。
-
PSQLExceptionが発生する
-
wsprintf関数の使い方について
-
Tomcatが無応答となる現象が起...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ORA-01858: 数値を指定する箇所...
-
java DAO 日付指定フォーマット...
-
BOOL値を逆にしたい
-
C# ListBoxのインデックスの値...
-
Java配列でNullPointerExceptio...
-
配列にnullを代入すると、null...
-
getStringの値がNULLの時の処理
-
例外でBeanUtils.populateが、...
-
jsp/Servletの動的に増えるフォ...
-
eclipseでoracle接続時のエラー...
-
空欄のテキストフィールドの判...
-
逆コンパイルの見方について(...
-
テキストフィールドに何も入れ...
-
Stringを返す getText()メソッ...
-
JSPで複数のSQL実行につ...
-
C#でラジオボタンとコンボボッ...
-
beanの利用
-
HashMapがおかしい
-
空白を返す処理
-
Try-catch文(FileInputStream)
おすすめ情報