Beispiel #1
0
        private void createFilterIndex(ICollection <ListViewGroup> grps)
        {
            ToolStripMenuItem toolstrip_index_other  = new ToolStripMenuItem("その他");
            ToolStripMenuItem toolstrip_index_num    = new ToolStripMenuItem("数字");
            ToolStripMenuItem toolstrip_index_alpha  = new ToolStripMenuItem("A-Z");
            ToolStripMenuItem toolstrip_index_kana_a = new ToolStripMenuItem("あ");
            ToolStripMenuItem toolstrip_index_kana_k = new ToolStripMenuItem("か");
            ToolStripMenuItem toolstrip_index_kana_s = new ToolStripMenuItem("さ");
            ToolStripMenuItem toolstrip_index_kana_t = new ToolStripMenuItem("た");
            ToolStripMenuItem toolstrip_index_kana_n = new ToolStripMenuItem("な");
            ToolStripMenuItem toolstrip_index_kana_h = new ToolStripMenuItem("は");
            ToolStripMenuItem toolstrip_index_kana_m = new ToolStripMenuItem("ま");
            ToolStripMenuItem toolstrip_index_kana_y = new ToolStripMenuItem("や");
            ToolStripMenuItem toolstrip_index_kana_r = new ToolStripMenuItem("ら");
            ToolStripMenuItem toolstrip_index_kana_w = new ToolStripMenuItem("わ");

            var kanas = new ToolStripMenuItem[] {
                toolstrip_index_kana_a,
                toolstrip_index_kana_k,
                toolstrip_index_kana_s,
                toolstrip_index_kana_t,
                toolstrip_index_kana_n,
                toolstrip_index_kana_h,
                toolstrip_index_kana_m,
                toolstrip_index_kana_y,
                toolstrip_index_kana_r,
                toolstrip_index_kana_w,
            };

            this.ContextMenuStrip.Items.Add(new ToolStripSeparator());
            var charTypes = new ToolStripMenuItem[] {
                toolstrip_index_num,
                toolstrip_index_alpha,
                toolstrip_index_kana_a,
                toolstrip_index_kana_k,
                toolstrip_index_kana_s,
                toolstrip_index_kana_t,
                toolstrip_index_kana_n,
                toolstrip_index_kana_h,
                toolstrip_index_kana_m,
                toolstrip_index_kana_y,
                toolstrip_index_kana_r,
                toolstrip_index_kana_w,

                toolstrip_index_other,
            };

            this.ContextMenuStrip.Items.AddRange(charTypes);

            foreach (var e in kanas.Concat(charTypes))
            {
                var self = e; // ブロック内に参照コピー
                e.Enabled = false;
                e.Click  += (x, y) => self.DropDownItems[0].PerformClick();
            }

            foreach (ListViewGroup grp in grps)
            {
                char c = grp.Header[0];
                if (c == ' ')
                {
                    continue;
                }
                ToolStripMenuItem target = toolstrip_index_other;
                if ('A' <= c && 'Z' >= c)
                {
                    target = toolstrip_index_alpha;
                }
                else if ('0' <= c && '9' >= c)
                {
                    target = toolstrip_index_num;
                }
                else if ('あ' <= c && 'お' >= c)
                {
                    target = toolstrip_index_kana_a;
                }
                else if ('か' <= c && 'こ' >= c)
                {
                    target = toolstrip_index_kana_k;
                }
                else if ('さ' <= c && 'そ' >= c)
                {
                    target = toolstrip_index_kana_s;
                }
                else if ('た' <= c && 'と' >= c)
                {
                    target = toolstrip_index_kana_t;
                }
                else if ('な' <= c && 'の' >= c)
                {
                    target = toolstrip_index_kana_n;
                }
                else if ('は' <= c && 'ほ' >= c)
                {
                    target = toolstrip_index_kana_h;
                }
                else if ('ま' <= c && 'も' >= c)
                {
                    target = toolstrip_index_kana_m;
                }
                else if ('や' <= c && 'よ' >= c)
                {
                    target = toolstrip_index_kana_y;
                }
                else if ('ら' <= c && 'ろ' >= c)
                {
                    target = toolstrip_index_kana_r;
                }
                else if ('わ' <= c && 'ん' >= c)
                {
                    target = toolstrip_index_kana_w;
                }
                int index = grp.Items[0].Index;
                var item  = grp.Items[0];
                var last  = grps.Last().Items[grps.Last().Items.Count - 1].Index; // 最後のグループの最後の項目
                target.Enabled = true;
                if (target.OwnerItem != null)
                {
                    target.OwnerItem.Enabled = true;
                }
                target.DropDownItems.Add(grp.Header, null, (e, obj) =>
                {
                    this.ContextMenuStrip.Hide();
                    this.EnsureVisible(last);
                    this.EnsureVisible(index);
                });
            }
        }