首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> .NET 網頁程式設計 >> C# >> 關於C#

C# 實現執行期控件設計器:拖曳建立、屬性編輯與右鍵刪除

     編輯:關於C#

專案簡介

本專案示範如何在 WinForms 應用程式執行時期,實現類似 Visual Studio 設計器的功能:從工具箱拖曳建立控件、滑鼠拖曳移動控件、右鍵選單刪除控件、以及透過屬性視窗即時修改控件屬性(如 Text)。

核心功能模組

  1. 工具箱顯示/隱藏:透過按鈕切換 Panel 可見度,模擬工具箱展開收合。
  2. 拖曳建立控件:工具箱按鈕 MouseDown 觸發 DoDragDrop,設計區 DragEnter/DragDrop 建立新控件並加入事件。
  3. 控件移動與選取:新建控件綁定 MouseDown/MouseMove/MouseLeave 實現拖曳移動與焦點管理。
  4. 右鍵刪除:ContextMenuStrip 提供刪除選項,呼叫 Control.Dispose() 釋放資源。
  5. 屬性視窗綁定:點選控件時,將其 Name、Text 顯示於屬性面板,修改文字即時同步至控件。

關鍵程式碼片段

1. 工具箱按鈕拖曳啟動

private void button3_MouseDown(object sender, MouseEventArgs e)
{
    if (e.Button == MouseButtons.Left)
    {
        Button btn = (Button)sender;
        btn.DoDragDrop(btn, DragDropEffects.Copy);
    }
}

2. 設計區放置與初始化新控件

private void panel4_DragDrop(object sender, DragEventArgs e)
{
    Button srcBtn = (Button)e.Data.GetData("System.Windows.Forms.Button");
    Button newBtn = new Button();
    newBtn.ContextMenuStrip = contextMenuStrip1;
    newBtn.Name = newBtn.Text = srcBtn.Text + "--" + name++;
    newBtn.Left = PointToClient(MousePosition).X - panel4.Left;
    newBtn.Top = PointToClient(MousePosition).Y - panel4.Top;

    newBtn.Click += button1_Click;           // 選取顯示屬性
    newBtn.MouseDown += button1_MouseDown;   // 啟動移動
    newBtn.MouseMove += button1_MouseMove;   // 拖曳移動
    newBtn.MouseLeave += button1_MouseLeave; // 結束移動
    newBtn.Parent = panel4;
}

3. 屬性視窗同步

private void button1_Click(object sender, EventArgs e)
{
    groupBox1.Text = (sender as Button).Name + "屬性";
    textBox1.Text = (sender as Button).Text;
}

private void textBox1_KeyPress(object sender, KeyPressEventArgs e)
{
    btnflag.Text = textBox1.Text;
}

4. 右鍵刪除控件

private void toolStripMenuItem2_Click(object sender, EventArgs e)
{
    btnflag.Dispose(); // btnflag 為目前選中的控件
}

執行效果

執行期設計器示意圖

擴充建議

  • 加入更多控件類型(TextBox, Label, ComboBox 等)至工具箱。
  • 實作控件對齊、疊層順序(置頂/置底)、複製貼上功能。
  • 屬性格使用 PropertyGrid 控件可支援完整屬性編輯。
  • 序列化設計器配置至 XML/JSON,實現儲存與載入版面。

結語

透過 DoDragDrop、事件綁定與動態建立控件,即可快速構建一個輕量級的執行期設計器原型。此架構可作為報表設計器、表單產生器、儀表板編輯器等應用的基礎框架。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved