C#开发学习笔记:GridControl添加右键快捷菜单
1.向窗體拖入控件
2.在窗體加載事件中為快捷菜單的選項綁定自定義事件
foreach (ToolStripMenuItem item in contextMenuStrip1.Items) {string itemname = item.ToString();item.Click += new EventHandler(ItemClick); }3.定義自定義事件需要調用的方法
public void ItemClick(object sender, EventArgs e) {ToolStripMenuItem item = sender as ToolStripMenuItem;//將事件觸發對象轉換為快捷菜單的ItemDataRow row = gridView1.GetFocusedDataRow();//獲取當前焦點行string a = gridView1.GetFocusedRowCellDisplayText(gridView1.FocusedColumn);if (item.Text == "復制"){Clipboard.SetDataObject(a);//將要復制的單元格數據存放到剪切板中} else if (item.Text == "復制新增"){DataTable dt=gridControl1.DataSource as DataTable;//獲取當前grid的數據源dt.ImportRow(row);//將焦點行插入到數據源中} else if (item.Text == "選擇" || item.Text == "全選"){DataTable dt=gridControl1.DataSource as DataTable;//獲取所有數據行if (item.Text == "全選")gridView1.SelectRows(0, dt.Rows.Count - 1);//設置所有數據行被選中if (item.Text == "選擇")gridView1.SelectRow(gridView1.FocusedRowHandle);//設置當前焦點行被選中 } }
4.當一個窗體中有許多Grid時,需要考慮每一個grid單獨綁定快捷菜單,這樣才能準確的執行操作,所以需要獲取窗體中的所有控件
由于控件有父子關系,所以直接使用this.Controls(this代表當前窗體)獲取的控件只是窗體的下一級控件,如上圖中的一級控件.所以
需要使用遞歸的方法獲取當前這個窗體中的所有控件(包括容器控件中的子控件)
(1).同樣在窗體加載事件中循環this.Controls
foreach (Control item in this.Controls) {GetAllControl(item, this); }
(2).定義一個方法和一個泛型集合(用于存儲控件)
private static List<Control> ControlList = new List<Control>(); public static void GetAllControl(Control control, Form form) {ControlList.Add(control);foreach (Control item in control.Controls){GetAllControl(item, form);//遞歸,調用自身} }
5.遞歸(百度百科)
(1).遞歸的定義
遞歸,就是在運行的過程中調用自己。
構成遞歸需具備的條件:
函數嵌套調用過程示例
函數嵌套調用過程示例
1. 子問題須與原始問題為同樣的事,且更為簡單;
2. 不能無限制地調用本身,須有個出口,化簡為非遞歸狀況處理。
在數學和計算機科學中,遞歸指由一種(或多種)簡單的基本情況定義的一類對象或方法,并規定其他所有情況都能被還原為其基本情況。
斐波納契數列(Fibonacci Sequence),又稱黃金分割數列,指的是這樣一個數列:1、1、2、3、5、8、13、21..... I[1]
斐波納契數列是典型的遞歸案例:
遞歸關系就是實體自己和自己建立關系。
Fib(0) = 1 [基本情況] Fib(1) = 1 [基本情況] 對所有n > 1的整數:Fib(n) = (Fib(n-1) + Fib(n-2)) [遞歸定義] 盡管有許多數學函數均可以遞歸表示,但在實際應用中,遞歸定義的高開銷往往會讓人望而卻步。例如:
階乘(1) = 1 [基本情況] 對所有n > 1的整數:階乘(n) = (n * 階乘(n-1)) [遞歸定義] 一種便于理解的心理模型,是認為遞歸定義對對象的定義是按照“先前定義的”同類對象來定義的。例如:你怎樣才能移動100個箱子?答案:你首先移動一個箱子,并記下它移動到的位置,然后再去解決較小的問題:你怎樣才能移動99個箱子?最終,你的問題將變為怎樣移動一個箱子,而這時你已經知道該怎么做的。
如此的定義在數學中十分常見。例如,集合論對自然數的正式定義是:1是一個自然數,每個自然數都有一個后繼,這一個后繼也是自然數。
德羅斯特效應
德羅斯特效應是遞歸的一種視覺形式
又例如,我們在兩面相對的鏡子之間放一根正在燃燒的蠟燭,我們會從其中一面鏡子里看到一根蠟燭,蠟燭后面又有一面鏡子,鏡子里面又有一根蠟燭……這也是遞歸的表現。
(2).遞歸的應用
遞歸算法一般用于解決三類問題:
(1)數據的定義是按遞歸定義的。(Fibonacci函數)
(2)問題解法按遞歸算法實現。
這類問題雖則本身沒有明顯的遞歸結構,但用遞歸求解比迭代求解更簡單,如Hanoi問題。
(3)數據的結構形式是按遞歸定義的。
如二叉樹、廣義表等,由于結構本身固有的遞歸特性,則它們的操作可遞歸地描述。
遞歸的缺點:
遞歸算法解題相對常用的算法如普通循環等,運行效率較低。因此,應該盡量避免使用遞歸,除非沒有更好的算法或者某種特定情況,遞歸更為適合的時候。在遞歸調用的過程當中系統為每一層的返回點、局部量等開辟了棧來存儲。遞歸次數過多容易造成棧溢出等。
遞歸典型問題: 梵塔問題(漢諾塔問題)
已知有三根針分別用A, B, C表示,在A中從上到下依次放n個從小到大的盤子,現要求把所有的盤子
從A針全部移到B針,移動規則是:可以使用C臨時存放盤子,每次只能移動一塊盤子,而且每根針上
總結
以上是生活随笔為你收集整理的C#开发学习笔记:GridControl添加右键快捷菜单的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: rom diy进阶教程之apk反编译基础
- 下一篇: C# 调用ffmepg 读取海康或大华