C# と VB.NET の質問掲示板

わんくま同盟

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

ツリー一括表示

ListViewの選択行に空欄があった場合の処理 /もぐら (20/02/07(Fri) 15:14) #93821
Re[1]: ListViewの選択行に空欄があった場合の処理 /りんく (20/02/07(Fri) 16:35) #93825
  └ Re[2]: ListViewの選択行に空欄があった場合の処理 /もぐら (20/02/07(Fri) 17:08) #93826 解決済み


親記事 / ▼[ 93825 ]
■93821 / 親階層)  ListViewの選択行に空欄があった場合の処理
□投稿者/ もぐら (3回)-(2020/02/07(Fri) 15:14:06)

分類:[C#] 

2020/02/07(Fri) 15:39:10 編集(投稿者)

Windowsアプリケーションで開発しています。
ボタンClickのイベントにより
ListViewで選択行のフォーカスを1行ずつ下に移動させています。

private void Button1_Click(object sender, EventArgs e)
{
int nextIndex = listView1.SelectedItems[0].Index + 1;
listView1.Items[nextIndex].Selected = true;
listView1.Items[nextIndex].Focused = true;
listView1.Focus();
listView1.Select();
listView1.EnsureVisible(nextIndex);
}

Listviewで選択している行の一番左の列に空欄があった場合にメッセージボックスを表示させたいです。
どうすればいいでしょうか?
[ □ Tree ] 返信 編集キー/

▲[ 93821 ] / ▼[ 93826 ]
■93825 / 1階層)  Re[1]: ListViewの選択行に空欄があった場合の処理
□投稿者/ りんく (8回)-(2020/02/07(Fri) 16:35:24)
No93821 (もぐら さん) に返信
Formsですよね?
Forms久しぶりなので間違っていたら申し訳ありません。

> Listviewで選択している行の一番左の列に空欄があった場合にメッセージボックスを表示させたいです。

こういうことでしょうか?
if(string.IsNullOrEmpty(listView1.SelectedItems[0].SubItems[0].Text))
{
    MessageBox.Show("空欄!");
}

ちなみに、載せていただいたコードを実行すると
フォーカス選択が正しくできませんでした。
null チェックなどもないので、未選択の状態でボタンを押すと例外になります。

少し変えて確認したコードが以下です。
private void Button1_Click(object sender, EventArgs e)
{
    if (listView1.SelectedItems[0] != null)
    {
        if (listView1.SelectedItems[0].SubItems[0] != null &&
            string.IsNullOrEmpty(listView1.SelectedItems[0].SubItems[0].Text))
        {
            MessageBox.Show("選択している行の一番左が空欄!");
        }
        int index = listView1.SelectedItems[0].Index;
        int nextIndex = index + 1;
        if (nextIndex < listView1.Items.Count)
        {
            listView1.Items[index].Selected = false;
            listView1.Items[index].Focused = false;
            listView1.Items[nextIndex].Selected = true;
            listView1.Items[nextIndex].Focused = true;
            listView1.Focus();
            listView1.Select();
            listView1.EnsureVisible(nextIndex);
        }
    }
}

[ 親 93821 / □ Tree ] 返信 編集キー/

▲[ 93825 ] / 返信無し
■93826 / 2階層)  Re[2]: ListViewの選択行に空欄があった場合の処理
□投稿者/ もぐら (4回)-(2020/02/07(Fri) 17:08:25)
No93825 (りんく さん) に返信
> ■No93821 (もぐら さん) に返信
> Formsですよね?
> Forms久しぶりなので間違っていたら申し訳ありません。
>
>>Listviewで選択している行の一番左の列に空欄があった場合にメッセージボックスを表示させたいです。
>
> こういうことでしょうか?
> if(string.IsNullOrEmpty(listView1.SelectedItems[0].SubItems[0].Text))
> {
> MessageBox.Show("空欄!");
> }
>
> ちなみに、載せていただいたコードを実行すると
> フォーカス選択が正しくできませんでした。
> null チェックなどもないので、未選択の状態でボタンを押すと例外になります。

ありがとうございます。そういうことです!
実際のコードでは未選択については別途チェックしています。
ありがとうございました。
解決済み
[ 親 93821 / □ Tree ] 返信 編集キー/


管理者用

- Child Tree -