2013年11月12日火曜日

[c#]DataGridViewのマウスホイールでのスクロールを1行単位にする

こちらのサイトにありました。

 DataGridViewはマウスホイールのスクロールで3行送りです。(OS設定に依存します)
このスクロール量を1行送りに変えます。

DataGridViewを継承したクラスを作って、OnMouseWheelでチョイチョイとすればいい感じになります。

MouseEventArgsコンストラクターの第5引数が若干意味不明です。
なにやら、マウスホイールの1ラッチで120単位の移動量となるとか、説明を見てもよくわかりません。

実行すると、マウスホイールを手前に1ラッチすると、e.Deltaには-120が入っています。
MouseWheelScrollLinesには3が入っています。

つまり、第5引数には-40を設定すれば、1行送りになるかというと、確かにそうなります。
マウスの設定でスクロールする行数を1に変更しても、e.Deltaには-120が入ってきます。
この場合、-120でも1行送りになります。

どういう仕組なの?

よくわかりませんが、結果オーライで行きます。

  1. public class DataGridViewEx : DataGridView  
  2. {  
  3.     // ホイールマウス制御  
  4.     protected override void OnMouseWheel(MouseEventArgs e)  
  5.     {  
  6.         // マウス ホイールを回転したときにスクロールする行数を取得  
  7.         Int32 scroll = SystemInformation.MouseWheelScrollLines;  
  8.   
  9.         // MouseEventArgsクラスの移動量を1行に変更  
  10.         MouseEventArgs ex = new MouseEventArgs(e.Button, e.Clicks, e.X, e.Y, e.Delta / scroll);  
  11.   
  12.         base.OnMouseWheel(ex);  
  13.     }  
  14. }  

2013年11月1日金曜日

[c#]フォームが1つしか表示されないようにする

メインフォームとサブフォームがあって、サブフォームはモードレスで表示する場合に、サブフォームが1つだけ表示されるようにする方法です。


  1. private SubForm _subForm = null;  
  2. private void showSubForm()  
  3. {  
  4.     //フォームが表示されているかの判定  
  5.     if (this._subForm == null || this._subForm.IsDisposed)  
  6.         this._subForm = new PlanListForm();  
  7.   
  8.     if (!this._subForm.Visible)  
  9.     {  
  10.         this._subForm.Show();  
  11.     }  
  12.     else  
  13.     {  
  14.         this._subForm.Activate();  
  15.     }  
  16.   
  17. }  

2013年9月4日水曜日

[SQL Server] SQL Serverでテーブル定義取得(全テーブル)

SQL Serverで、テーブル定義らしいものを取得するクエリです。
これとの違いは、データベース内のすべてのテーブルについて出力します。

  1. select  
  2.  obj.name as 'テーブル名'  
  3. ,col.name as '名称'  
  4. ,(select top 1 name from systypes where systypes.xtype = col.xtype) as '型'  
  5. ,col.length as '桁数'  
  6. ,case isnull(col.scale,0)  
  7.  when 0 then ' '  
  8.  else cast( col.scale as char(10) )  
  9.  end '小数部'  
  10. ,case  col.isnullable  
  11.  when 0 then '○'  
  12.  else ' '  
  13.  end 'nn'  
  14. ,isnull((select case colid when 0 then '' else '○' end  from sysindexkeys as keys where col.id = keys.id  and col.colid = keys.colid and keys.indid = 1),' 'as 'pk'  
  15. ,isnull((select top 1 ex.value from sys.extended_properties as ex where col.id = ex.major_id and ex.minor_id = col.colid and ex.name = 'ms_description' ),' 'as 'コメント'  
  16. from syscolumns as col  
  17. inner join sysobjects as obj on col.id = obj.id  
  18. where obj.name in  (select name from sysobjects where xtype = 'u')