程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> C#發現之旅第六講 C#圖形開發中級篇(7)

C#發現之旅第六講 C#圖形開發中級篇(7)

編輯:關於C語言

首先重寫OnMouseDown方法,由於剛剛說到的折射效果,需要將鼠標光標位置 從控件客戶區坐標轉換為文檔視圖坐標。然後設置LastMousePosition變量,該變量服務於鼠 標拖拽操作。遍歷表格文檔的所有的單元格對象,判斷單元格的邊框是否包含鼠標光標所在 位置,然後根據需要設置單元格的選擇狀態,若單元格的選擇狀態發生改變,則調用 InvalidateCell方法聲明該單元格樣式無效,准備重新繪制該單元格。

然後重寫 OnMouseMove方法,首先進行鼠標光標位置坐標轉換,若LastMousePosition有效,則說明用 戶正在拖拽鼠標,然後根據LastMousePosition坐標和當前鼠標光標坐標獲得一個選擇區域矩 形,然後遍歷所有單元格,判斷選擇矩形和單元格邊框是否相交,並設置單元格的選擇狀態 ,若單元格的選擇狀態發生改變則聲明該單元格樣式無效,准備重新繪制界面。

重寫 OnMouseUp方法,設置LastMousePosition變量無效,結束鼠標拖拽操作。

復制數據

程序主窗體上有一個復制按鈕,按下該按鈕可以進入到控件的Copy方法。代碼為

/// <summary>
/// 復制選擇的單元格的文本
/// </summary>
public void Copy()
{
   System.Text.StringBuilder myStr = new System.Text.StringBuilder();
   foreach( CellRow row in myDocument )
  {
    bool find = false;
    foreach( Cell cell in row )
    {
       if( cell.Selected )
      {
        myStr.Append( cell.Text );
        myStr.Append( " " );
         find = true ;
      }
    }
    if( find )
      myStr.Append( System.Environment.NewLine );
  }
  if( myStr.Length > 0 )
  {
    System.Windows.Forms.DataObject data = new DataObject();
    data.SetData( myStr.ToString());
     System.Windows.Forms.Clipboard.SetDataObject( data , true );
  }
  }

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved