ComboBoxの見た目と中身を別にする
コンボボックスの見た目と欲しいデータが別なんてことはよくあることですね。
簡単な物だったら匿名クラスを使ってちょいちょいです。
this.comboBox1.ValueMember = "value"; this.comboBox1.DisplayMember = "display"; this.comboBox1.DataSource = new[]{ new { value="1", display="でーた1" }, new { value="2", display="でーた2"}, new { value="3", display="でーた3"}, new { value="4", display="でーた4"}, new { value="5", display="でーた5"}, }; //ValueMember と DisplayMember はデザイナーの方で指定したほうがスッキリすると思うます
DisplayMember が見た目に使うプロパティ名
ValueMember が実際のデータのプロパティ名 になります。
this.comboBox1.SelectedValueにデータバインドをしておけばvalueが勝手に取得できて楽になります。
ユーザーコントロールのスナップを自作する
ユーザーコントロールを作成してテキストボックスなんか置いたりすると、スナップ(ピンクの線)が消えてしまって配置するのがめんどくさくなります。
そこで、ユーザーコントロールにもスナップを追加します。
とりあえずUserControlを継承したクラスを作成します。
この後作成するスナップ付きのユーザーコントロールにこのクラスを使います。
[Designer(typeof(UserControlSnapLineDesigner))] public class UserControlBase: UserControl { protected virtual Control SnapLineControl { get { return null; } } private class UserControlSnapLineDesigner: ControlDesigner { public override IList SnapLines { get { IList snapLines = base.SnapLines; Control targetControl = ( this.Control as UserControlBase ).SnapLineControl; if( targetControl == null ) return snapLines; using( ControlDesigner controlDesigner = TypeDescriptor.CreateDesigner(targetControl, typeof(IDesigner)) as ControlDesigner ) { if( controlDesigner == null ) return snapLines; controlDesigner.Initialize(targetControl); foreach( SnapLine line in controlDesigner.SnapLines ) { if( line.SnapLineType == SnapLineType.Baseline ) { snapLines.Add(new SnapLine(SnapLineType.Baseline, line.Offset + targetControl.Top, line.Filter, line.Priority)); break; } } } return snapLines; } } } }
先ほど作ったクラスを使用してユーザーコントロールを作成します。
作成するユーザーコントロールにはテキストボックスが配置してあり、このテキストボックスのスナップを持ってきます。
UserControlBase で作成したSnapLineControlをオーバーライドでコントロールを指定します。
public partial class ユーザーコントロール: UserControlBase { // ~ 細かいところは省略します ~ //ここで指定するだけ↓ protected override Control SnapLineControl { get { return this.textBox1; } } }
これでテキストボックスのピンクの線がユーザーコントロールにもつくようになりました。
引用:.net - Baseline snaplines in custom Winforms controls - Stack Overflow
自作プロパティを(DataBindings)に追加する方法
Visual Studioで自作プロパティをデザイナー内の(DataBindings)に追加する方法
System.ComponentModel.Bindable(true)をプロパティに付けましょう
[System.ComponentModel.Bindable(true)] public int プロパティ{ get;set; }
デザイナーから直接いじれるのは便利です。
キーが押されているか調べる
Control.MouseButtons とか Control.ModifierKeysを使うだけ
2つのキー同時押しはビット演算を使いましょう。
if( ( Control.MouseButtons & MouseButtons.Right ) == MouseButtons.Right ) { if( ( Control.ModifierKeys & ( Keys.Control | Keys.Shift ) ) == ( Keys.Shift | Keys.Control ) ) { // キー押されてます } }
はてなブログのソースコード記述
はてな記法で、csは小文字じゃないとダメなのね・・・
>|cs| // C# /// <summary> /// MainWindow の ViewModel です。 /// </summary> class MainWindowViewModel { /// <summary> /// Hoge を取得または設定します。 /// </summary> public String Hoge { get; set; } } ||< ↑ここのスペースを消すべし!