OSDN Git Service

AppliStation-GUI,インストール先フォルダ」のところでのNullReference(所謂ぬるぽ)問題を解決
authorttp <ttp@users.sourceforge.jp>
Sat, 23 Aug 2008 15:02:11 +0000 (15:02 +0000)
committerttp <ttp@users.sourceforge.jp>
Sat, 23 Aug 2008 15:02:11 +0000 (15:02 +0000)
 * Invokerの呼び出し元として、Formオブジェクトを渡せるようにした
   * InvokeがToolStripMenuItemになかったから安易にParentとかしていたのが、そもそもの発端(Parentが正しく初期化前なのでぬるぽが出た模様)。
   * ランチャーメニュークラスであるToolStripPetitLauncherMenuItemのInvokerFormプロパティを導入するという、結構HACKな仕様
 * 副作用な利益として、表示の高速化にも貢献した

git-svn-id: http://localhost/svn/AppliStation/trunk@955 34ed2c89-c49f-4a4b-abdb-c318350108cf

AppliStation/AppliStation.Util/ToolStripPetitLauncherMenuItem.cs
AppliStation/PackageListViewForm.Designer.cs

index b196ae8..159fa27 100644 (file)
@@ -6,6 +6,8 @@ using System.Windows.Forms;
 using System.Diagnostics;\r
 using System.Text;\r
 \r
+using System.ComponentModel;\r
+\r
 namespace AppliStation.Util\r
 {\r
        public class ToolStripPetitLauncherMenuItem : ToolStripMenuItem\r
@@ -14,9 +16,12 @@ namespace AppliStation.Util
                \r
                private string baseFolderPath;\r
                \r
+               private Form invokerForm;\r
+               \r
                /// <summary>\r
                /// 親フォルダ\r
                /// </summary>\r
+               [ReadOnly(true)]\r
                public string BaseFolderPath {\r
                        get { return baseFolderPath; }\r
                        set {\r
@@ -26,6 +31,14 @@ namespace AppliStation.Util
                }\r
                \r
                /// <summary>\r
+               /// 別スレッドからInvokeするときのオブジェクト\r
+               /// </summary>\r
+               public Form InvokerForm {\r
+                       get { return invokerForm; }\r
+                       set { invokerForm = value; }\r
+               }\r
+               \r
+               /// <summary>\r
                /// ドロップアイテムの(再)生成を行う\r
                /// </summary>\r
                public void BuildItems()\r
@@ -49,8 +62,8 @@ namespace AppliStation.Util
                private delegate int ToolStripItemCollection_AddDelegate(ToolStripItem item);\r
                private void _addToItemsInv(ToolStripItem item)\r
                {\r
-                       if (Parent.InvokeRequired) {\r
-                               Parent.Invoke(new ToolStripItemCollection_AddDelegate(DropDownItems.Add), item);\r
+                       if (InvokerForm.InvokeRequired) {\r
+                               InvokerForm.Invoke(new ToolStripItemCollection_AddDelegate(DropDownItems.Add), item);\r
                        } else {\r
                                DropDownItems.Add(item);\r
                        }\r
@@ -58,8 +71,8 @@ namespace AppliStation.Util
                private delegate void ToolStripItemCollection_InsertDelegate(int index, ToolStripItem item);\r
                private void _insertToItemsInv(int index, ToolStripItem item)\r
                {\r
-                       if (Parent.InvokeRequired) {\r
-                               Parent.Invoke(new ToolStripItemCollection_InsertDelegate(DropDownItems.Insert), index, item);\r
+                       if (InvokerForm.InvokeRequired) {\r
+                               InvokerForm.Invoke(new ToolStripItemCollection_InsertDelegate(DropDownItems.Insert), index, item);\r
                        } else {\r
                                DropDownItems.Insert(index, item);\r
                        }\r
index 99e3873..27ee4bd 100644 (file)
                        this.installedDirectoryStripMenuItem.Name = "installedDirectoryStripMenuItem";\r
                        this.installedDirectoryStripMenuItem.Size = new System.Drawing.Size(204, 22);\r
                        this.installedDirectoryStripMenuItem.Text = "インストール先のフォルダ(&O)";\r
+                       this.installedDirectoryStripMenuItem.InvokerForm = this;\r
                        // \r
                        // propertiesToolStripMenuItem\r
                        // \r