ツールバーボタンの画像のパスを指定する
開発環境IDEであるSharpDevelopでのデザイン画面で、ツールバー上のボタンを設置して実行すると、見たこともないエラーになってウィンドウが立ち上がらない。
どうもボタンの画像を指定する行が良くないらしくエラーの原因であり、代わりに画像を埋め込まないボタンにすれば何の問題も発生しない。そこで、画像ファイルの引用部分をデザイン画面で行うのではなく、コードを書き直して対処する。
C#のコードで同じくツールバーにボタンを設置しているものがあったので、同じようにしてみる。そうすると問題なく起動した。ちゃんと動くコードを下に示す。
import System.Drawing import System.Windows.Forms from System.Drawing import * from System.Windows.Forms import * class MainForm(Form): def __init__(self): self.InitializeComponent() def InitializeComponent(self): resources = System.Resources.ResourceManager("test.MainForm", System.Reflection.Assembly.GetEntryAssembly()) self._toolStrip1 = System.Windows.Forms.ToolStrip() self._toolStripButton1 = System.Windows.Forms.ToolStripButton() self._toolStrip1.SuspendLayout() self.SuspendLayout() # # toolStrip1 # self._toolStrip1.Items.AddRange(System.Array[System.Windows.Forms.ToolStripItem]( [self._toolStripButton1])) self._toolStrip1.Location = System.Drawing.Point(0, 0) self._toolStrip1.Name = "toolStrip1" self._toolStrip1.Size = System.Drawing.Size(448, 25) self._toolStrip1.TabIndex = 0 self._toolStrip1.Text = "toolStrip1" # # toolStripButton1 # self._toolStripButton1.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image #下の行がデザイン画面で設定したときに自動的に生成される。これをコメントアウトする #self._toolStripButton1.Image = resources.GetObject("toolStripButton1.Image") #上の行の変わりにボタンに付ける画像ファイルのパスを指定する。これで動くようになった self._toolStripButton1.Image = Image.FromFile("c:\\car.bmp") self._toolStripButton1.ImageTransparentColor = System.Drawing.Color.Magenta self._toolStripButton1.Name = "toolStripButton1" self._toolStripButton1.Size = System.Drawing.Size(23, 22) self._toolStripButton1.Text = "toolStripButton1" self._toolStripButton1.Click += self.ToolStripButton1Click # # MainForm # self.ClientSize = System.Drawing.Size(448, 254) self.Controls.Add(self._toolStrip1) self.Name = "MainForm" self.Text = "Toolbar Button" self._toolStrip1.ResumeLayout(False) self._toolStrip1.PerformLayout() self.ResumeLayout(False) self.PerformLayout() def ToolStripButton1Click(self, sender, e): MessageBox.Show("test")