0

winforms で複数選択の画像ギャラリーを作成しようとしています。

現在、selectablepicturebox コントロールとして画像を追加する flowcontrolpanel を作成しました。

selectablepicturebox コントロールは、ピクチャーボックスとピクチャーボックスの右上にあるチェックボックスを備えた空白のコントロールである顧客のユーザーコントロールです。ピクチャーボックスは少し小さく、ユーザーコントロールの中央に配置されています。

selectablepicturebox コントロールをクリックすると、背景の表示選択のオンとオフが切り替わります。

私ができるようにしたいのは、一連の選択可能なpictureboxコントロールを選択し、スペースバーイベントをキャプチャして、選択したコントロールのチェックボックスをチェックおよびチェック解除できるようにすることです。

問題は、flowlayoutpanel がスペースバー イベントをキャプチャすることを認識していないことです。

これまたは別のテクノロジーを実行することを知っている人はいますか? .net ベースの技術を喜んで使用します。

ありがとう

編集:ここにコードへのリンクがあります

4

1 に答える 1

1

KeyDown イベントを試していますか?

MSDN によると、このメンバーはこのコントロールには意味がありません。

ここここを読んでください。代わりに、PreviewKeyDownを試すことができます

解決策: [GitHub コードベース]

ここに画像の説明を入力

[コードの変更点] 1. SelectablePictureBox.cs - Set Focus に注意

public void SetToSelected()
        {
            SelectedCheckBox.Checked = true;
            PictureHolder.Focus();
        }


private void PictureHolder_Click(object sender, EventArgs e)
        {
            BackColor = BackColor == Color.Black ? Color.Transparent : Color.Black;

            // TODO: Implement multi select features;

            if ((Control.ModifierKeys & Keys.Shift) != 0)
            {
                // Set the end selection index.
            }
            else
            {
                // Set the start selection index.
            }

            PictureHolder.Focus();
        }


// subscribe to picture box's PreviewKeyDown & expose a public event

 public event PreviewKeyDownEventHandler OnPicBoxKeyDown;
 private void OnPicBoxPrevKeyDown(object sender, PreviewKeyDownEventArgs e)
        {
            if (OnPicBoxKeyDown != null)
            {
                OnPicBoxKeyDown(sender, e);
            }
        }

【コード変更】 1. FormMain.cs

private void FormMain_Load(object sender, EventArgs e)
        {
            SensitiveInformation sensitiveInformation = new SensitiveInformation();
            int index = 0;
            //foreach (var photo in Flickr.LoadLatestPhotos(sensitiveInformation.ScreenName))
            for (int i = 0; i < 10; i++)
            {
                SelectablePictureBox pictureBox = new SelectablePictureBox(index);

                // subscribe to picture box's event
                pictureBox.OnPicBoxKeyDown += new PreviewKeyDownEventHandler(pictureBox_OnPicBoxKeyDown);
                PictureGallery.Controls.Add(pictureBox);
                index++;
            }
        }

// this code does the selection. Query the FLowLayout control which is the 1st one and select all the selected ones
void pictureBox_OnPicBoxKeyDown(object sender, PreviewKeyDownEventArgs e)
        {
            if (e.KeyCode != Keys.Space) return;
            foreach (SelectablePictureBox item in Controls[0].Controls)
            {
                if (item.IsHighlighted)
                {
                    item.SetToSelected();
                }
            }
        }
于 2012-05-30T20:42:04.337 に答える