0

私は次のように を持っていToolStripますContextMenu:

次のように、リソースに 2 つのアイコンがあります。

アイコンを16x16の対応するアイコンに切り替えようとしています:

void largeIconsToolStripMenuItem_Click(object sender, EventArgs e)
{
    var ContextItem = (ToolStripMenuItem) sender;
    var ContextMenu = (ContextMenuStrip) ContextItem.Owner;
    var ToolStrip = (ToolStrip) ContextMenu.SourceControl;
    var Checked = ContextItem.Checked;

    ToolStrip.ImageScalingSize = Checked ? new Size(32, 32) : new Size(16, 16);

    foreach(ToolStripButton Button in ToolStrip.Items)
        Button.Image = Resources.t_new16;
}

foreachこれは機能しますが、個々のアイコンごとに新しい行を追加したくありません。t_icon16現在のリソース名を に置き換えるにはどうすればよいt_icon32ですか?

Nameで物件を探してみましたButton.Imageが、ありません。

私も試しました:

foreach(ToolStripButton Button in ToolStrip.Items)
    foreach(PropertyItem P in Button.Image.PropertyItems)
        MessageBox.Show(P.Id.ToString() + " - " + P.Value.ToString());

しかし、MessageBoxes は表示されません。

リソース イメージを動的にスワップするにはどうすればよいですか?

4

2 に答える 2

0

画像の 2 つのリストを維持する必要なく、なんとかこれを行うことができました。

まず、 のプロパティを初期リソースの名前に設定するToolStripButton必要があります。Tag

そのセットを使用して、このコードは残りを動的に処理します。

void largeIconsToolStripMenuItem_Click(object sender, EventArgs e)
{
    var ResourceManager = new ResourceManager(typeof(Resources));
    var ContextItem = (ToolStripMenuItem) sender;
    var ContextMenu = (ContextMenuStrip) ContextItem.Owner;
    var ToolStrip = (ToolStrip) ContextMenu.SourceControl;
    var Checked = ContextItem.Checked;

    ToolStrip.ImageScalingSize = Checked ? new Size(32, 32) : new Size(16, 16);

    foreach(ToolStripButton Button in ToolStrip.Items)
    {
        var CurrentResource = Button.Tag.ToString();
        var NewResource = CurrentResource.Substring(0, CurrentResource.Length - 2) + (Checked ? "32" : "16");
        Button.Image = (Image) ResourceManager.GetObject(NewResource);
        Button.Tag = NewResource;
    }
}
于 2013-07-04T14:40:36.573 に答える