[ C# ] WinForm 中如何實現「拖曳元件」

作論文轉播字卡系統時,「字卡編輯器」的功能中需要用到拖曳元件的效果,

關於拖曳元件的概念,可分為三部份 MouseDownMouseMoveMouseUp

對於該元件或控制項實作這三樣事件,即可達到拖曳元件的效果!

=======================================================

在作拖曳元件時,可先定義一些全域變數幫助拖曳時計算元件位置。

圖片

[ MouseDown ]

圖片

[ MouseMove ]

圖片

[ MouseUp ]

圖片

=======================================================

以上例子是以 PictureBox 為例的程式碼截圖,當然也可換成 Control 來符合更多控制

項種類,另外,在實作拖曳實若控制項或元件有閃爍的情況,可藉由 DoubleBuffer 來

減緩此種現象,DoubleBuffer 為雙重緩衝繪製的機制,最簡單的方法就是在該 Form

的屬性中,將DoubleBuffered 改選為 True 即可。

圖片

 

Done!

 

附上該方法參考網址

[ C# ] WinForm 顯示於延伸螢幕之方法

在作論文「賽事字卡轉播系統」時,需將字卡畫面顯示於主播機 ( 延伸螢幕 ),

並且讓此 WinForm 全螢幕播放,以下找到幾個方法能達到這樣的目的。
—————————————————————————————————-
[ 方法一 ] 利用 Screen.PrimaryScreen.Bounds.Width 找到主要螢幕的寬度,
並將欲放置延伸螢幕的 Form 的 DesktopLocation 設置為其寬度,
這樣就可強迫此 Form 開啟位置為延伸螢幕。

[ 方法二 ] 對所有螢幕作判斷,判斷是否為主要螢幕,若有螢幕不是主要螢幕
則將此 Form 開啟位置設定為此螢幕的 Location,即可。

圖片

 

此為方法一參考資料

DONE!!

[ .NET ] SQL CE reset ID 為初始值

在資料庫中若僅是刪除 ( Delete ) 資料或是清空資料的話,則下次加進來的資料

其自動產生的 ID ( 或是 IDENTITY ) 仍會以最後產生之 ID 為基準向下遞增;在測

試完資料庫後,若想將 ID reset ,一般資料庫 ( SQL ) 可使用以下指令:

       TRUNCATE TABLE '資料表名稱'

但在 SQL Server CE 中,發現無法使用此語法來達到初始化的效果,在谷歌後

發現這個問題並不難解,這篇討論中可以得知,使用以下指令:

     ALTER TABLE '資料表名稱' ALTER COLUMN ID IDENTITY (1,1)

即可將資料表清空且 ID 初始化。

DONE!

[ .NET ] ASP.NET C# 無法使用 SqlCeConnection 之問題解決

上一篇成功建立了 SqlCe 的資料庫檔案 (.sdf) ,接著是在程式中對資料庫的操作。

在 C# 中要對 SQL Server Compact Edition 進行連線,則需使用 SqlCeConnection

,在這邊參考黃大師的數字筆記,很明確地指出,若要使用 SqlCeConnection,

則需最額外參考的加入。

圖片

圖片

加入參考後,即可 using 。圖片

———————————————————————————————————————

接著再參考一次黃大師的數字筆記之二

在 ASP.NET 使用 SqlCeConnection 時會發生例外 (並非設計供 ASP.NET使用)

解決方法如下:

在使用 SqlCeConnection 前加上
AppDomain.CurrentDomain.SetData(“SQLServerCompactEditionUnderWebHosting", true);
黃大師數字筆記中提到,建議將此行放在 Global.asax 的 Application_Start 中,讓此行僅執行一次即可。

DONE!

[ .NET ] 於 ASP.NET C# 中使用 SQL Sever Compact

製作UU網頁時,在背後需要一個資料庫,在同學的建議之下,使用 SqlCe 來製作,

而使用 SQL Server Compact 產生資料庫 (.sdf) 在網頁專案中並無法直接使用。

原因可由此篇文章中得知:「微軟官方認為 SQLCE 本就不是開發在多人環境下使用,

所以才無法在 WEB 這種多人專案上直接新增出 SQLCE 檔。」

——————————————————————————————————————

[ 解決方法 ]

  1. 建立 Windows Form 專案,再由此新增一個 SQLCE 檔案。
    圖片
  2. 接著於模型(.edmx)中繪製資料表間關聯性。圖片
  3. 繪製完成後,按右鍵選擇「由模型產生資料庫」,選擇欲連線資料庫後完成。
    圖片
  4. 按完成後,會產生 .sqlce 檔,雙擊此檔案會看到語法頁,
    於此頁按右鍵選擇「執行SQL」,在資料庫檔案中選取資料庫路徑即可。
    圖片圖片
  5. 完成連接後,此 Database.sdf 即可使用。
    ( 若於 WEB 專案中欲使用 .sdf 的話,在伺服器總管中「加入資料連接」
    選擇「Microsoft SQL Server Compact 3.5(or 4.0)」,接著設定剛剛產
    生的 .sdf 檔即可。)
    圖片圖片
    圖片
  6. 打完收工,DONE!

[ .NET ] UpdatePanel 獨立更新區域小記

.NET Framework 4.0 下使用小記

一個網頁分為很多區域,有時操作後僅想更新某部分區域,

這時就可使用 UpdatePanel  來建立獨立更新之區域。

————————————————————————————————————

  1. 在工具箱中的 [AJAX 擴充功能] ,將 ScriptManager 控制項加入頁面。
    圖片
  2. 接著在 [AJAX 擴充功能] 中,再將 UpdatePanel 加入頁面。
    圖片
  3. 為了能獨立更新此 UpdatePanel,故將其 UpdateMode 屬性改為 Conditional
    UpdateMode 屬性分別為 Always 與 Conditional,而預設值為 Always。
    若為預設時表示收到該網頁的任何部分回傳時,都會更新 UpdatePanel 內容;
    而屬性值為 Conditional 時,只在此 UpdatePanel 下的回傳 ( 或 F5 ) 作更新。
    圖片

由上述步驟即設定好此一 UpdatePanel 的區域,若想要多個獨立更新的區塊,

則重複加入 UpdatePanel 與設定其 UpdateMode 即可。

————————————————————————————————————

參考文章與連結:Microsoft Developer Network魔法魚的異想空間

[ CSS ] CSS Position 參考筆記

在作UU的網頁時,對於頁面上圖片的 Position 屬性產生好奇,

Google 後發現還蠻多細心的教學,所以還是留下連結小筆記,

以便日後再次用到。

———————————————————————————————————

CSS Position 屬性共有四個值,包含staticrelativeabsolutefixed

若未設定時,預設為static。

這邊提供我覺得寫得很詳細的解說與範例

[ C# ] 資料庫程式連接方式

今天在撰寫程式與資料庫溝通時找到一篇整理的很好的文章

以下筆記了幾種資料庫 (Access, SQL, MySQL) 的連結方式:

  1. 連接 Accessusing System.Data.OleDb;

    String strCon =
              “Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + 檔案名稱 + “.mdb;" ;
    OleDbConnection AccessCon = new OleDbConnection(strCon);
    AccessCon.Open() ;           // 開啟資料庫連接

    AccessCon.Close() ;          // 關閉對資料庫連接

  2. 連接 Excel

    using System.Data.OleDb;

    String strCon =
              “Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + 檔案名稱 +
    “.xls;ExtendedProperties=Excel 8.0;" ;

    OleDbConnection ExcelCon = new OleDbConnection(strCon);
    ExcelCon.Open();

    ExcelCon.Dispose();                // 釋放 Component 所使用的資源

  3. 連接 SQL Severusing System.Data.SqlClient;

    // 用 Windows 身份驗證
    String strCon =
              “Data Source=(local);Initial Catalog=TestDb;Integrated Security=SSPI;" ;

    // 用 SQL Server 身份驗證
    String strCon =
    @“Data Source=.\SQLExpress;Database=TestDb;Uid=user;Pwd=****;" ;

    SqlConnection SqlSvrCon = new SqlConnection(strCon);
    SqlSvrCon.Open();

    SqlSvrCon.Close();

  4. 連接 MySQL
    要連接 MySQL 前需先加入參考 ( Mysql.Data.dll )
    using MySql.Data.MySqlClient;MySqlConnection my_DB_Connection;
    string myConnection_DB_String;

    myConnection_DB_String = String.Format(
           “server={0};user id={1}; password={2}; database={3}; pooling=false",
           “127.0.0.1″, “root", “xxxx", “testDB"); // 連結mdb之字串
    my_DB_Connection = new MySqlConnection(myConnection_DB_String);
    my_DB_Connection.Open();

    my_DB_Connection.Close();

  • p.s. 綠字部分為自行修改的檔案名稱、使用者帳號或密碼。

參考文章:隨便寫寫的新天地

[ C# Form ] 跨執行緒存取UI

在撰寫 Windows Form 時,當使用多個執行緒 (Thread),

若需在不同執行緒下控制元件,會遇到「跨執行緒控制無效…」的問題。

目前參考網路上的解法有二:

  1. 直接對 Form 的屬性作改變,此法較不安全,若程式很單純不複雜,以此解即可:
    Form.CheckForIllegalCrossThreadCalls = False
  2. 採委派的方式,此法較為正統,但撰寫上較為複雜:
      private delegate void UpdateUICallBack(string value, Control ctl);  
      private void UpdateUI(string value, Control ctl)  
      {  
          if (this.InvokeRequired) {  
              UpdateUICallBack uu = new UpdateUICallBack(UpdateUI);  
              this.Invoke(uu , value, ctl);  
          }  
          else {  
              ctl.Text = value;  
          }  
      }
    在需要存取控制項時作 UpdateUI 即可。

參考文章 : mOMo’s BLOG