1 回答

TA貢獻1966條經驗 獲得超4個贊
示例代碼:
兩個類級變量和一個輔助函數:
List<Point> dots = new List<Point>();
int dotSize = 12;
Rectangle fromPoint(Point pt, int size)
{
return new Rectangle(pt.X - size/ 2, pt.Y - size / 2, size, size);
}
mouseclick(與 click 事件相反)包含位置:
private void Pbxkarte_MouseClick(object sender, MouseEventArgs e)
{
if (!dots.Contains(e.Location))
{
dots.Add(e.Location);
Pbxkarte.Invalidate(); // show the dots
}
}
您可以添加代碼來刪除點或更改屬性,尤其是。如果您創建一個點類。- 如果您想避免重疊點,您可以使用類似于 mousemove 中的代碼來檢測這一點。但。不要重復代碼!相反,分解出一個boolOrPoint IsDotAt(Point)可以兩次使用的函數!
在鼠標移動中我只顯示點擊狀態。你做你的事..
private void Pbxkarte_MouseMove(object sender, MouseEventArgs e)
{
bool hit = false;
foreach (var dot in dots)
{
using (GraphicsPath gp = new GraphicsPath())
{
gp.AddEllipse(fromPoint(dot, dotSize));
if (gp.IsVisible(e.Location))
{
hit = true; break;
}
}
}
Cursor = hit ? Cursors.Hand : Cursors.Default;
}
每當列表中或系統中發生任何更改時,列表中的所有點都必須顯示。:
private void Pbxkarte_Paint(object sender, PaintEventArgs e)
{
foreach (var dot in dots)
{
using (GraphicsPath gp = new GraphicsPath())
{
gp.AddEllipse(fromPoint(dot, dotSize));
e.Graphics.FillPath(Brushes.Red, gp);
}
}
}
如果您想要更多屬性,例如文本或顏色,請創建class dot并使用List<dot>!
- 1 回答
- 0 關注
- 141 瀏覽
添加回答
舉報