• 追加された行はこの色です。
  • 削除された行はこの色です。
#contents

*TreeViewで複数ノードの選択 [#h3582256]
-[[CodeProject: Multi-Select TreeView Control in C#. Free source code and programming help:http://www.codeproject.com/KB/tree/mwcontrols.aspx]]
-[[TreeViewで複数ノードの選択は可能ですか? | OKWave:http://okwave.jp/qa/q2521085.html]]

*ドッキングウィンドウ(DockPanel Suite) [#e4fc70dc]
VisualStudio風のドッキング可能なウィンドウ(DockingWindow)を作りたい場合、
「DockPanel Suite」を使用すると楽。
-[[DockPanel Suite プロジェクト日本語トップページ - SourceForge.JP:http://sourceforge.jp/projects/sfnet_dockpanelsuite/]]
-[[DockPanel Suite | Get DockPanel Suite at SourceForge.net:http://sourceforge.net/projects/dockpanelsuite/]]
-[[DockPanel Suiteの使用方法 - .NETでドッキングウィンドウを実現:http://www.crystal-creation.com/software/technical-information/library/dockpanel.htm]]
-実行中ドッキング時にブルースクリーンエラーが出る場合があった。~
(エラー時の環境ではXNAをWindowsフォーム上で動作させています)~
デバイスドライバのエラーらしく、青画面が一瞬出たあとすぐWindowsが再起動する。~
回避方法は不明。PCによって出たりでなかったりする。~
他のドッキングウィンドウのライブラリを使用しても出るみたいなので、おそらくアプリケーション側のコードに問題があるのではないかと思う。~
GraphicsDeviceControl 辺りはサンプルコードそのままでも再現する。一体何がおかしいのか謎。

-(メモ)実行中ドッキング時に稀に出るエラー:~
Invalid parent form. When using DockingMdi or SystemMdi document style, the DockPanel control must be the child control of the main MDI container form.~
解决方法:~
dockpanel を配置したフォームの IsMdiContainer=true に。
**ウィンドウレイアウトの保存方法 [#yfd8789d]
アプリケーション終了時にウィンドウレイアウトを保存し、次回起動時に復帰させることができます。~
ドッキングウィンドウのサイズ、位置などが保存されます。~
以下の方法ではメインフォームのレイアウトは保存されないので、別途対処する必要があります。
    const string SAVE_LAYOUT_PATH = @"SaveLayout.xml";
    
    /// <summary>
    /// フォームが読み込まれた時に呼ばれる
    /// </summary>
    /// <param name="sender"></param>
    /// <param name="e"></param>
    private void MainForm_Load(object sender, EventArgs e)
    {
        // フォームの生成
        {
            // プレビュー
            m_previewForm = new PreviewForm();
            // テクスチャ
            m_textureForm = new TextureForm();
            // ノードツリー
            m_nodeForm = new NodeForm();
        }
    
        // ウィンドウレイアウトXMLが存在していたら読み出して適用する
        if (System.IO.File.Exists(SAVE_LAYOUT_PATH))
        {
            WeifenLuo.WinFormsUI.Docking.DeserializeDockContent deserializeDockContent = new WeifenLuo.WinFormsUI.Docking.DeserializeDockContent(GetDockContentFromPersistString);
            this.dockPanel1.LoadFromXml(SAVE_LAYOUT_PATH, deserializeDockContent);
        }
        else
        {
            // XMLがなければデフォルト
            m_previewForm.Show(this.dockPanel1, WeifenLuo.WinFormsUI.Docking.DockState.Document);
            m_textureForm.Show(this.dockPanel1, WeifenLuo.WinFormsUI.Docking.DockState.Float);
            m_nodeForm.Show(this.dockPanel1, WeifenLuo.WinFormsUI.Docking.DockState.DockLeft);
        }
    }
	
    /// <summary>
    /// ウィンドウの名称に対応するDockContentを返す
    /// </summary>
    /// <param name="persistString"></param>
    /// <returns></returns>
    WeifenLuo.WinFormsUI.Docking.IDockContent GetDockContentFromPersistString(string persistString)
    {
        if (persistString == typeof(PreviewForm).FullName)
            return m_previewForm;
        if (persistString == typeof(TextureForm).FullName)
            return m_textureForm;
        if (persistString == typeof(NodeForm).FullName)
            return m_nodeForm;
        return null;
    }
    
    /// <summary>
    /// フォームが閉じられた後に呼ばれる
    /// </summary>
    /// <param name="sender"></param>
    /// <param name="e"></param>
    private void MainForm_FormClosed(object sender, FormClosedEventArgs e)
    {
        this.dockPanel1.SaveAsXml(SAVE_LAYOUT_PATH);
    }



*描画の更新頻度を上げる [#taa6c134]
デフォルトのままでは描画の更新が毎フレーム呼ばれないので、~
フォームにTimerコントロールを配置して、Tickイベントで Control.Invalidate() を呼んでやる。~
プロパティはこんな感じ
|Enable|true|
|Interval|8|

別の方法として、
 System.Windows.Forms.Application.Idle += delegate { Invalidate(); };
という方法もある。~
試してみた限りだと、Timerコントロールでやった方が滑らかに描画できた。~
処理負荷等は未検証。


*Dictionary の初期値設定 [#p58846d8]
C# 3.0 から、以下のような感じで初期化(初期値の設定)ができるようになった。
 using System.Collections.Generic;
 
 class Hoge
 {
   Dictionary<string, string> dict = new Dictionary<string, string>()
   {
     {"txt", "notepad.exe"},
     {"bmp", "paint.exe"},
     {"dib", "paint.exe"},
   };
 }
ローカル変数であれば、''var''キーワードが使える。
 public void Method()
 {
   var dict = new Dictionary<string, string>()
   {
     {"txt", "notepad.exe"},
     {"bmp", "paint.exe"},
     {"dib", "paint.exe"},
   };
 }

*PropertyGridコントロール [#r7073da0]
**並び順を制御する [#g1afffc9]
デフォルトの状態では勝手に要素がソートされてしまう為、以下のようにして~
並び順を制御してやる。
 /// <summary>
 /// プロパティグリッドのプロパティの並び順をコントロールする。
 /// </summary>
 class PropertyGridSortTypeConverter : TypeConverter
 {
    public override PropertyDescriptorCollection GetProperties(ITypeDescriptorContext context, object value, Attribute[] attributes)
    {
        // TypeDescriptorを使用してプロパティ一覧を取得する
        PropertyDescriptorCollection pdc = TypeDescriptor.GetProperties(value, attributes);
 
        // プロパティの並び順を指定する。
        string[] sortOrder = 
        {
            "FormatImageDir",
            "ImageDir",
            "PrintDataDir",
            "ImageNoSettingFLG",
        };
 
        // ソートする。
        return pdc.Sort(sortOrder);
 
        // return base.GetProperties(context, value, attributes);
    }
 
    /// <summary>
    /// GetPropertiesをサポートしていることを表明する。
    /// </summary>
    /// <param name="context"></param>
    /// <returns>常にtrue</returns>
    public override bool GetPropertiesSupported(ITypeDescriptorContext context)
    {
        return true;
    }
 }
 
 //-------------------------------------------------------------------------------------------------------------
 // プロパティ定義部
 [TypeConverter(typeof(PropertyGridSortTypeConverter))]
 public class HogeProperty
 {
    public int FormatImageDir { get; set; }
    public int ImageDir { get; set; }
    public int PrintDataDir { get; set; }
    public int ImageNoSettingFLG { get; set; }
 }
**参考 [#q042252b]
-[[PropertyGridコントロールの使い方: .NET Tips: C#, VB.NET, Visual Studio:http://dobon.net/vb/dotnet/control/propertygrid.html]]
-[[.NET Framework の PropertyGrid コントロールの高度な活用:http://msdn.microsoft.com/ja-jp/library/aa302326.aspx]]
-[[Visual Studio .NET プロパティ ブラウザによるコンポーネントの本格的な RAD 化:http://msdn.microsoft.com/ja-jp/library/aa302334.aspx]]

*AutoScroll の位置がリセットされないようにする [#m0e4c29d]
スクロールしたあと、別のフォームにフォーカスした後フォーカスを戻すと、~
スクロール位置が(0,0)に戻ってしまう。~
回避するには、以下のように ScrollToControl() をオーバーライドする。
 protected override Point ScrollToControl(Control activeControl)
 {
    return this.AutoScrollPosition;
 }

*色選択コントロール [#d540646b]
色選択のカスタムコントロール。カスタムカラーピッカー(Custom color picker control)~
-[[Adobe Color Picker Clone part 1 - CodeProject:http://www.codeproject.com/KB/cpp/adobe_cp_clone_part_1.aspx]]
-[[Zeta Color Editor - CodeProject:http://www.codeproject.com/KB/miscctrl/ZetaColorEditor.aspx]]
-[[Adobe Eyedropper Control - CodeProject:http://www.codeproject.com/KB/miscctrl/adobe_eyedropper.aspx]]
-[[Adobe Color Picker Clone - CodeProject:http://www.codeproject.com/KB/dialog/ColorPicker.aspx]]
-[[.NET Color Picker Controls - CodeProject:http://www.codeproject.com/KB/selection/dotnetcolorpicker.aspx]]
-[[Zeta Color Editor - CodeProject:http://www.codeproject.com/KB/miscctrl/ZetaColorEditor.aspx]]
-[[My Version of the Ubiquitous Color Picker - CodeProject:http://www.codeproject.com/KB/miscctrl/UbiquitousColorPicker.aspx]]
-[[Color Picker with Color Wheel and Eye Dropper - CodeProject:http://www.codeproject.com/KB/miscctrl/colorwheelv1.aspx]]

以下、WPF ASP.NETなど
-http://www.codeproject.com/KB/WPF/WPFDropDownColorPicker.aspx

*その他コントロール [#s7c895de]
-スプライトエンジン~
[[Endogine sprite engine - CodeProject:http://www.codeproject.com/KB/game/endogine.aspx]]
-いろいろなピッカー。Align,Dockコントロールなど。~
[[Pickers Library: For Creating Pickers in .NET - CodeProject:http://www.codeproject.com/KB/combobox/PickersLib.aspx]]
-カスタムPropertyGrid~
http://www.codeproject.com/KB/miscctrl/PropertyGrid.aspx?msg=2819388


    ホーム 一覧 単語検索 最終更新 バックアップ リンク元   ヘルプ   最終更新のRSS