読者です 読者をやめる 読者になる 読者になる

プログラミングの魔物

エラー、バグ、仕様変更と戦うブログ

正規表現でパターンの否定

メモメモ

True if pattern /PAT/ does not match, like $var !~ /PAT/:

/^(?:(?!PAT).)*$/s

True if pattern BAD does not match, but pattern GOOD does:

/(?=^(?:(?!BAD).)*$)GOOD/s

http://d.hatena.ne.jp/amt/20060728/Hitei

VirtualModeでShift+クリックで複数選択するとSelectedIndicesに入ってこないので多分自分で管理する必要がある。
これは面倒くさいな。

        private int selectedIndex = -1;

        private int GetItemFromCursor(ListView listView) { 
            Point local = listView.PointToClient(Cursor.Position);
            return listView.GetItemAt(local.X, local.Y).Index;
        }

        private void listView1_Click(object sender, EventArgs e) {
            int newIndex = GetItemFromCursor(listView1);
            if ((Control.ModifierKeys & Keys.Shift) == Keys.Shift) {
                int min = Math.Min(selectedIndex, newIndex);
                int max = Math.Max(selectedIndex, newIndex);
                for (; min < max; min++) {
                    if (min >= 0) {
                        listView1.SelectedIndices.Add(min);
                    }
                }
            }
            selectedIndex = newIndex;
        }

選択が解除される時にはselectedIndexを-1に初期化する。
Shift+方向キーなどの対応も必要。

C#は組みやすいから他のことが手につかなくて困る。