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

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

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

Re[6]: リストボックスの色変更について


(過去ログ 43 を表示中)

[トピック内 8 記事 (1 - 8 表示)]  << 0 >>

■22672 / inTopicNo.1)  リストボックスの色変更について
  
□投稿者/ AriAri (1回)-(2008/07/29(Tue) 16:12:32)

分類:[C#] 

お世話になります。

C#2003でリストボックスに文字を追加する際に、特定の行目だけ色を変更したいのですが
別クラスの引数にListBox(System.Windows.Forms.ListBox)を渡して処理させたいのです。

やりたいことは下記URLの通りなのですが
自フォームクラスのDrawItemメソッドで処理となっています。

サンプルのURLでも結構です。
ご示唆いただきたくよろしくお願いいたします。

http://www.kisoplus.com/sample/owner.html
http://dobon.net/vb/dotnet/control/lbownerdraw.html
引用返信 編集キー/
■22673 / inTopicNo.2)  Re[1]: リストボックスの色変更について
□投稿者/ επιστημη (1186回)-(2008/07/29(Tue) 16:19:37)
επιστημη さんの Web サイト
> C#2003でリストボックスに文字を追加する際に、特定の行目だけ色を変更したいのですが
> 別クラスの引数にListBox(System.Windows.Forms.ListBox)を渡して処理させたいのです。

なにがしたいのか/なにが問題なのか わかりません。
"別クラス"とは?
どんなクラスであろうがListBoxのDrawItemハンドラ
を置くことができるので問題なさそうに思えるのですが。

引用返信 編集キー/
■22675 / inTopicNo.3)  Re[1]: リストボックスの色変更について
□投稿者/ まどか (569回)-(2008/07/29(Tue) 16:30:39)
> 別クラスの引数にListBox(System.Windows.Forms.ListBox)を渡して処理させたいのです。

「クラスの引数」がよくわかりません。

・別クラスインスタンスにすべてを任せる
・色変更したいときに呼び出す

のどちらでしょうか?

後者は、ListBoxインスタンスを渡すという意味ではありえません。
DrawItem内の処理の一部を外に出すという考え方になると思います。

引用返信 編集キー/
■22680 / inTopicNo.4)  Re[2]: リストボックスの色変更について
□投稿者/ AriAri (2回)-(2008/07/29(Tue) 16:57:51)
早速の返信ありがとうございます。

何がしたいのか?はURLの通り、「LISTBOXの文字色を任意に変える」です。
方法は「別クラスインスタンスにすべてを任せる」です。
問題は「どんなクラスであろうがListBoxのDrawItemハンドラを置くことができるので」が分かりません

言葉足らずですみません。

フォームクラス A
○○処理クラス B
として、BクラスへAクラスのListBoxを渡して、セットされたListBoxを戻り値として返却するメソッドをBクラスに作りたいと考えます。
どうぞよろしくお願いいたします。
引用返信 編集キー/
■22682 / inTopicNo.5)  Re[3]: リストボックスの色変更について
□投稿者/ 魔界の仮面弁士 (795回)-(2008/07/29(Tue) 17:24:57)
2008/07/29(Tue) 17:33:28 編集(投稿者)

No22680 (AriAri さん) に返信
> フォームクラス A
> ○○処理クラス B
> として、BクラスへAクラスのListBoxを渡して、セットされたListBoxを戻り値として返却するメソッドをBクラスに作りたいと考えます。

こんな感じでは駄目でしょうか。

ListItemRenderer r;
private void Form1_Load(object sender, EventArgs e)
{
r = new ListItemRenderer(listBox1);
}

private class ListItemRenderer
{
ListBox listBox;
public ListItemRenderer(ListBox listBox)
{
this.listBox = listBox;
this.listBox.DrawMode = DrawMode.OwnerDrawFixed;
this.listBox.DrawItem += delegate(object sender, DrawItemEventArgs e)
{
if (e.Index >= 0)
{
e.DrawBackground();
TextRenderer.DrawText(e.Graphics,
listBox.GetItemText(listBox.Items[e.Index]),
this.listBox.Font, e.Bounds, Color.Red,
TextFormatFlags.Default);
if (((int)e.State & (int)DrawItemState.Selected) != 0)
{
e.DrawFocusRectangle();
}
}
};
}
}
引用返信 編集キー/
■22686 / inTopicNo.6)  Re[4]: リストボックスの色変更について
□投稿者/ AriAri (4回)-(2008/07/29(Tue) 18:11:10)
魔界の仮面弁士さん
サンプルソースありがとうございました。
イメージに近いと思います。

ただ、なぜかコピペ実行するとエラーになってしまいます。
C#2003ではNGなのでしょうか

引用返信 編集キー/
■22688 / inTopicNo.7)  Re[5]: リストボックスの色変更について
□投稿者/ 魔界の仮面弁士 (796回)-(2008/07/29(Tue) 18:33:03)
No22686 (AriAri さん) に返信
> C#2003ではNGなのでしょうか

あぁっと。そういえば 2003 でしたっけか。であればこうかな。

手元に VS2003 が無いので、メモ帳 + 手動コンパイルですが、一応動いているようで。


// ファイル
// C:\sample.cs
//
// コンパイル
// C:\WINDOWS\Microsoft.NET\Framework\v1.1.4322\csc.exe /t:winexe /out:C:\sample.exe C:\sample.cs
//
using System;
using System.Drawing;
using System.Windows.Forms;

class Form1: Form {
  public static void Main() { Application.Run(new Form1()); }
  private ListBox listBox1 = new ListBox();
  private ListBox listBox2 = new ListBox();
  ListItemRenderer r;
  private Form1() {
    listBox1.Items.AddRange(new object[] { "あ", "い", "う", "え" });
    Controls.Add(listBox1);
    listBox2.Top = listBox1.Bottom;
    listBox2.Items.AddRange(new object[] { "か", "き", "く", "け" });
    Controls.Add(listBox2);
    r = new ListItemRenderer(listBox1);
  }
  private class ListItemRenderer {
    ListBox listBox;
    public ListItemRenderer(ListBox listBox) {
      this.listBox = listBox;
      this.listBox.DrawMode = DrawMode.OwnerDrawFixed;
      this.listBox.DrawItem += new DrawItemEventHandler(Foo);
    }
    private void Foo(object s, DrawItemEventArgs e) {
      // この中は任意実装で。
      if (e.Index < 0) return;
      e.DrawBackground();
      e.Graphics.DrawString(listBox.GetItemText(listBox.Items[e.Index]),
        this.listBox.Font, Brushes.Red, e.Bounds, StringFormat.GenericDefault);
      if (((int)e.State & (int)DrawItemState.Selected) != 0) e.DrawFocusRectangle();
    }
  }
}

引用返信 編集キー/
■22691 / inTopicNo.8)  Re[6]: リストボックスの色変更について
□投稿者/ AriAri (6回)-(2008/07/29(Tue) 18:52:28)
魔界の仮面弁士 さん

ありがとうございます。
希望の実装ができました。m(__)m

解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -