問題形成原因:軟件一般都是左側樹導航或上部菜單導航,做好一個軟件后,有的客戶可能想用一個頁面做導航圖像,而各個客戶用的功能可能不同,所以導航布局需要自定義。
思路:1.把菜單列出來
2.雙擊菜單生成一個按鈕 這個按鈕可以拖動
3.保存按鈕的 top left 值,下次就可以直接讀了
實現:這里只寫了生成和拖動功能(效果如下圖)
左側treeview 雙擊 生成button 到右側panel 且可拖動

private void tv_DoubleClick(object sender, EventArgs e) { TreeNode tnd = tv.SelectedNode; if (tnd == null) return; //遍歷panel控件 已存在的就不生成了 代碼。。。略 Button btn = new Button(); btn.Text = tnd.Text; btn.Tag = tnd.Tag; btn.Width = 100; btn.Height = 100; btn.Image = Resources.aa; btn.MouseMove += Btn_MouseMove; btn.MouseDown += Btn_MouseDown; panel1.Controls.Add(btn); } Point myPoint; private void Btn_MouseDown(object sender, MouseEventArgs e) { myPoint = e.Location; } private void Btn_MouseMove(object sender, MouseEventArgs e) { Button button; button = (Button)sender; button.BringToFront(); ((Control)button).Cursor = Cursors.Arrow;//設置拖動時鼠標箭頭 if (e.Button == MouseButtons.Left) { Point mousePos = Control.MousePosition; mousePos.Offset(-myPoint.X, -myPoint.Y);//設置偏移 ((Control)button).Location = ((Control)button).Parent.PointToClient(mousePos); } }
完成上邊的 我們就可以做個保存按鈕 把位置保存上了