我正在撰寫一個用于從圖論創建圖形的程式代碼。
單擊網格會生成具有相應索引的圖形節點。按鈕在右側生成。我希望在單擊按鈕時節點通過邊緣連接。例如,當您單擊第 1 行和第 2 列上的按鈕時,將繪制連接圓 1 和 2 的邊。
在此處輸入影像描述
按鈕生成代碼
List<Button> btnList = new List<Button>();
for (int z = 1; z <= count; z )
{
for (int x = 1; x <= count; x )
{
Button btn = new Button();
btn.Text = 0.ToString();
btn.Location = new Point(z*30, x*30);
btn.Size = new System.Drawing.Size(30, 30);
btn.BackColor = System.Drawing.Color.White;
btn.MouseClick = new System.Windows.Forms.MouseEventHandler(btnClick);
panel1.Controls.Add(btn);
btnList.Add(btn);
}
}
描述按鈕點擊的事件代碼
public void btnClick(object sender, EventArgs e)
{
Button button = (Button)sender;
button.Text = (int.Parse(button.Text) 1).ToString();
Graphics g = Graphics.FromImage(bmp);
Pen pen = new Pen(Color.Black);
//g.DrawLine(pen, );
pictureBox1.Image = bmp;
}
也許這個問題很愚蠢,但我不明白如何在 btnClick 函式中參考按下按鈕的索引。
uj5u.com熱心網友回復:
對于 C# 中的每個物件,您都有一個免費的 Tag 屬性。您可以使用它來存盤按鈕的坐標。
因此,在將 btn 添加到 panel1.Controls 之前插入,如下所示:
btn.Tag = new Point(z, x);
然后,在 btnClick 委托中,要取回您的坐標,您可以使用以下內容:
Button button = sender as Button;
Point p = button.Tag;
int z = p.X;
int x = p.Y;
您可以保留 Button button = (Button)sender; 唯一的區別是強制轉換可以拋出例外,但關鍵字“as”不能。
在我寫這篇文章的時候,我看到了新的評論和你的回復。標簽不在 KeyDown 之類的委托中,而是具有位置、大小、文本等屬性。
uj5u.com熱心網友回復:
您已經存盤了 z 和 x:
btn.Location = new Point(z*30, x*30);
您可以在單擊處理程式中執行此操作以檢索它們:
int z = button.Location.X / 30;
int x = button.Location.Y / 30;
uj5u.com熱心網友回復:
感謝您的回答。
我在生成按鈕時添加代碼
btn.Tag = new Point(z, x);
單擊按鈕時我使用 btn.Tag
Point p = (Point)button.Tag;
int z = p.X;
int x = p.Y;
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/443387.html
上一篇:將分頁器指示器影片化為按鈕
