質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

Q&A

解決済

2回答

2212閲覧

VisualstudioでC#使用、ListViewの背景色を行ごとに配色し、縞々模様のようにたい。

doidoi1104

総合スコア2

Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

0グッド

0クリップ

投稿2023/04/04 17:19

編集2023/04/05 00:55

実現したいこと

ListViewの背景色を縞々模様にする

前提

動作の内容は
textboxが複数個あり、値を入力し「追加ボタン」を押すと
ListViewに複数個の値が表示する
例:名前,性別,年齢,出身

そのListView上の背景色を行ごとに交互に配色し
結果縞々模様のようにしたいと考えています

現在、
他サイトでご教授いただいたコードを使用したら、
ListViewの行をカウントし奇数の場合はすべての行が選択した色、偶数の場合はすべての行が選択した色
になってしまいます

該当のソースコード

 private void setListColor()   
{
for (int i = 0; i < listView1.Items.Count; i++)
{
ListViewItem item = listView1.Items[i];
if (listView1.Items.Count % 2 == 0)
{
item.BackColor = Color.White;
}
else
{
item.BackColor = Color.LightCyan;
}
}
}

public void btnAdd_Click(object sender, EventArgs e)

.......
setListColor()
}

プログラミングの基礎知識もないままネットや書籍で調べている状態です
全くの初心者の為理解力も乏しく大変申し訳ないです、、、
恐縮ではございますが、どうぞ宜しくお願いいたします

該当のソースコード  

namespace Listview_csvvvvv
{
public partial class Form1 : Form
{
public object sfd { get; private set; }
public int i { get; private set; }

public Form1() { InitializeComponent(); } private void Form1_Load(object sender, EventArgs e) { } private void listView1_DrawSubItem(object sender, DrawListViewSubItemEventArgs e) { } public void btnAdd_Click(object sender, EventArgs e) { if (string.IsNullOrEmpty(txtName.Text) || string.IsNullOrEmpty(txtGender.Text) || string.IsNullOrEmpty(txtAge.Text) || string.IsNullOrEmpty(txtBirthplace.Text) || string.IsNullOrEmpty(txtHobby.Text)) return; ListViewItem item = new ListViewItem(txtName.Text); item.SubItems.Add(txtGender.Text); item.SubItems.Add(txtAge.Text); item.SubItems.Add(txtBirthplace.Text); item.SubItems.Add(txtHobby.Text); listView1.Items.Add(item); txtName.Clear(); txtGender.Clear(); txtAge.Clear(); txtBirthplace.Clear(); txtHobby.Clear(); //setListColor();//背景色を帰るのを呼び出してる } /*private void setListColor()   //背景色 交互にならんん { for (int i = 0; i < listView1.Items.Count; i++) { ListViewItem item = listView1.Items[i]; if (listView1.Items.Count % 2 == 0) { item.BackColor = Color.White; } else { item.BackColor = Color.LightCyan; } } }*/

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2023/04/04 22:26

開発環境を質問欄を編集して追記してください。(例: Windows 10 の Visual Studio 2022 で Windows Forms アプリをターゲットフレームワーク .NET Framework 4.8 で作っています・・・とか)
doidoi1104

2023/04/05 00:45

情報不足で大変失礼しました。当方、Windows 11 の Visual Studio 2022Forms アプリをフレームワーク .NET Framework4.7.2で作っています!どうぞ宜しくお願いいたします
TN8001

2023/04/05 03:38

「C#」・「.NET Framework」・「Windows Forms」タグがございます。 ソースコードはコードブロックを使用してください。 [ヘルプ|質問するときのヒント](https://teratail.com/help/question-tips#questionTips35) 質問はいつでも何度でも編集できます。
退会済みユーザー

退会済みユーザー

2023/04/05 03:51 編集

> 当方、Windows 11 の Visual Studio 2022Forms アプリをフレームワーク .NET Framework4.7.2で作っています! 上の質問欄を編集して追記願います。ここコメント欄はもともと情報の追加などを依頼する場所で、初期画面では閉じていて見ない人もいますので。
退会済みユーザー

退会済みユーザー

2023/04/05 03:50

ソースコードの上下を ``` と ``` で囲ってください(``` はバッククォート 3 つ)。インデントされて読みやすくなるので。
guest

回答2

0

【C# ListView】背景色を 1 行おきに変える - ITLAB51.COM
https://www.itlab51.com/?p=3160

これをどうぞ

投稿2023/04/04 22:12

y_waiwai

総合スコア87774

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

doidoi1104

2023/04/05 00:52

URLのご提示ありがとうございます! そちらのサイトは既に確認済でして、コードを実装すると番号が振られて、その番号をカウントして奇数偶数かで、配色変更されるのかと解釈しているのですが、 そうしてしまうと、テキストボックスで入力した文字がlistviewに出てこなくなりました 基礎を理解していないので、コードを組み替えたり試行錯誤を行ってもエラーばかりで、、 URlご提示いただいたにも関わらず恐縮ですが、 ご教示いただきましたら幸いです ※コード全文を質問に追加で貼り付けました、
guest

0

ベストアンサー

ListViewの行をカウントし奇数の場合はすべての行が選択した色、偶数の場合はすべての行が選択した色
になってしまいます

「奇数の場合はすべての行が水色、偶数の場合はすべての行が白」ですね?

薄々わかってるんじゃないかと思いますが、if文の条件がおかしいです。

if (listView1.Items.Count % 2 == 0)は、「ListViewの行数を2で割ったときの余りが0(=ListViewの行数が偶数)なら」という意味です。

行の色を交互に変えたいのですから、if (i % 2 == 0)iが偶数なら)等にしないといけません。

cs

1using System; 2using System.Drawing; 3using System.Linq; 4using System.Windows.Forms; 5 6namespace Q3tklhoki365pfb 7{ 8 public partial class Form1 : Form 9 { 10 public Form1() 11 { 12 InitializeComponent(); 13 } 14 15 private void btnAdd_Click(object sender, EventArgs e) 16 { 17 if (string.IsNullOrEmpty(txtName.Text) || 18 string.IsNullOrEmpty(txtGender.Text) || 19 string.IsNullOrEmpty(txtAge.Text) || 20 string.IsNullOrEmpty(txtBirthplace.Text) || 21 string.IsNullOrEmpty(txtHobby.Text)) 22 return; 23 24 ListViewItem item = new ListViewItem(txtName.Text); 25 item.SubItems.Add(txtGender.Text); 26 item.SubItems.Add(txtAge.Text); 27 item.SubItems.Add(txtBirthplace.Text); 28 item.SubItems.Add(txtHobby.Text); 29 listView1.Items.Add(item); 30 31 txtName.Clear(); 32 txtGender.Clear(); 33 txtAge.Clear(); 34 txtBirthplace.Clear(); 35 txtHobby.Clear(); 36 37 setListColor(); 38 39 40 // 配列等を使うとスッキリします^^ 41 //TextBox[] textBoxes = { txtName, txtGender, txtAge, txtBirthplace, txtHobby, }; 42 //if (textBoxes.Any(x => string.IsNullOrEmpty(x.Text))) 43 // return; 44 45 //ListViewItem item = new ListViewItem(txtName.Text); 46 //foreach (TextBox textBox in textBoxes) 47 //{ 48 // item.SubItems.Add(textBox.Text); 49 // textBox.Clear(); 50 //} 51 //listView1.Items.Add(item); 52 53 //setListColor(); 54 } 55 56 private void setListColor() 57 { 58 for (int i = 0; i < listView1.Items.Count; i++) 59 { 60 ListViewItem item = listView1.Items[i]; // iが0なら1行目・iが1なら2行目。。。 61 62 //if (listView1.Items.Count % 2 == 0) // 間違い 63 if (i % 2 == 0) // iが偶数(=奇数行目)なら... 64 { 65 item.BackColor = Color.White; 66 } 67 else 68 { 69 item.BackColor = Color.LightCyan; 70 } 71 // ↑↓同じ意味 72 //item.BackColor = i % 2 == 0 ? Color.White : Color.LightCyan; 73 } 74 } 75 } 76}

private void listView1_DrawSubItem(object sender, DrawListViewSubItemEventArgs e)

オーナードローでやる方法もあります(その場合はsetListColor()はいらなくなる)
すらすらプログラマー リストビュー
[ VB.NET / C# ] ListView 1行おきに背景色を変更して縞々のリストにする – 偏差値40プログラマー

投稿2023/04/05 03:38

TN8001

総合スコア9321

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問