プロが教えるわが家の防犯対策術!

C#にて、WIndowsアプリを作成しています。
GridviewのcellEnterイベント発生時に、Panelに文字を記載する! というプログラムを
作成しています。表示の文字がPanel内を超過した際の事を考え、PanelのAutoscroll = Trueに設定しています。しかしながら、文字がPanelを超過してもうまくスクロールを表示してくれません。。。

どのようにすれば、解決できるのでしょうか。。。。
ご存知の方、ご教授願います。

以下、文字列記載のPaintメソッドです。
また、Paintメソッド呼び出しには、
   this.pCon.Invalidate();
を利用しています。


private void pCon_Paint(object sender, PaintEventArgs e)
{
StringFormat strformat = new StringFormat();

if (this.pCon.Enabled == true)
{
SolidBrush brushText = new SolidBrush(ForeColor);
// 通常の文字列を描画する
e.Graphics.DrawString(
c, // 描画する文字列
this.Font, // フォント
brushText, // 色(ブラシ)
e.ClipRectangle,// 描画領域
strformat); // 文字列の書式
brushText.Dispose();
}
else
{
// 無効化された文字列を描画する
ControlPaint.DrawStringDisabled(
e.Graphics, // 描画オブジェクト
c, // 描画する文字列
this.Font, // フォント
this.BackColor, // 色
e.ClipRectangle,// 描画領域
strformat); // 文字列の書式
}
strformat.Dispose();
}

A 回答 (1件)

Panel の AutoScroll プロパティは、


パネル内に配置したコントロールに対しての自動スクロールになります。
(コントロールがパネルの表示サイズを超えるような位置に配置されている場合にスクロールを表示)
プログラムで独自に描画する内容に対しての自動スクロールではありません。

独自の描画内容に対してスクロールバーで表示範囲を動かしたい場合、
独自にスクロールバーを制御して、スクロールバーの位置移動に反応して
位置に対応する適切な部分の内容を描画する、というような作りにする必要があります。

もし、代用できるのであれば、TextBoxを利用した方が良いのでは無いかと思います。
TextBox の MultiLine プロパティを true とし、
ScrollBars プロパティを Both などに設定して、
AppendText()メソッドなどで文字列を追加していきます。

ただし、MaxLengthで示される最大長を超える追加はできませんので、
適当なタイミングで一旦クリアするか先頭のほうの文字列を削除するなどの対処は必要となります。
    • good
    • 0
この回答へのお礼

丁寧なご回答ありがとうございます。
うまく実装出来ず、半ばあきらめ気味だったのですがおかげで意図するような
動きをしてくれるように変更することが出来ました。

ただ、torasさんが言われている通り、やはりTextBoxとPanelでは見た目上も
多少異なる為(Boxの右脇に常にスクロールが表示される[灰色で非表示形式だとしても])、
この点について、今回は良いですが、今後はエンドユーザ側にも確認を取り進めたいなと思います。(エンドユーザ>>お客さまにしろ、社内向けにしろ)

わかりやすく、出来ないだけでは無くご提案まで頂いて本当にありがとうございました。
完璧な回答です!!

お礼日時:2013/03/05 09:52

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!