
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();
}
No.1ベストアンサー
- 回答日時:
Panel の AutoScroll プロパティは、
パネル内に配置したコントロールに対しての自動スクロールになります。
(コントロールがパネルの表示サイズを超えるような位置に配置されている場合にスクロールを表示)
プログラムで独自に描画する内容に対しての自動スクロールではありません。
独自の描画内容に対してスクロールバーで表示範囲を動かしたい場合、
独自にスクロールバーを制御して、スクロールバーの位置移動に反応して
位置に対応する適切な部分の内容を描画する、というような作りにする必要があります。
もし、代用できるのであれば、TextBoxを利用した方が良いのでは無いかと思います。
TextBox の MultiLine プロパティを true とし、
ScrollBars プロパティを Both などに設定して、
AppendText()メソッドなどで文字列を追加していきます。
ただし、MaxLengthで示される最大長を超える追加はできませんので、
適当なタイミングで一旦クリアするか先頭のほうの文字列を削除するなどの対処は必要となります。
丁寧なご回答ありがとうございます。
うまく実装出来ず、半ばあきらめ気味だったのですがおかげで意図するような
動きをしてくれるように変更することが出来ました。
ただ、torasさんが言われている通り、やはりTextBoxとPanelでは見た目上も
多少異なる為(Boxの右脇に常にスクロールが表示される[灰色で非表示形式だとしても])、
この点について、今回は良いですが、今後はエンドユーザ側にも確認を取り進めたいなと思います。(エンドユーザ>>お客さまにしろ、社内向けにしろ)
わかりやすく、出来ないだけでは無くご提案まで頂いて本当にありがとうございました。
完璧な回答です!!
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
-
別のフォームで記述している関数を実行するには?C#
C言語・C++・C#
-
FORMが開いているかどうかの確認方法
Visual Basic(VBA)
-
ピクチャーボックスの大きさに合わせて画像を表示
Visual Basic(VBA)
-
-
4
DataTableに入っているデータを全てinsertしたい!(C#)
Microsoft ASP
-
5
CloseとDisposeの違い
Visual Basic(VBA)
-
6
ラベルの文字列の長さが変わったときに、ラベル位置を自動で変更する方法
C言語・C++・C#
-
7
CSVファイルの中で、「 , 」カンマを使いたい
その他(コンピューター・テクノロジー)
-
8
C#で親にイベントを投げる方法
C言語・C++・C#
-
9
データグリッドビューの一番最初の行に列を追加したい
Visual Basic(VBA)
-
10
【C#】 あるイベントから別イベントを呼び出す。
その他(プログラミング・Web制作)
-
11
Labelの文字をスクロールする際にちらつきが・・・
Visual Basic(VBA)
-
12
C#プログラムで、ボタンをショートカットキー付きで作りたいのですが、方
その他(プログラミング・Web制作)
-
13
インスタンス参照でアクセスできない。代わりに型名?
C言語・C++・C#
-
14
C# DataTableに最後に追加した行をDataGridView上で選択状態にする方法は?
C言語・C++・C#
-
15
C# DataGridView の列ヘッダーのマウス右クリックイベントにつきまして
C言語・C++・C#
-
16
C# ListBoxのアイテムをユーザーが直接リネームできるようにすることは可能ですか?
C言語・C++・C#
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
[VB.net] DataGridViewの列ヘッ...
-
word
-
ワード2019 描画ツールの書式が...
-
UpdateData( FALSE); による文...
-
InvalidateRectの使い方について
-
NVIDIAのシェーダーキャッシュ
-
win32api 画面のちらつき
-
ビットマップの表示ができません。
-
ブレゼンハムのアルゴリズムに...
-
C言語(dxlib)のDrawboxについ...
-
Windowのちらつき防止
-
MFCでOnPaintのタイミング
-
CStaticコントロールの静的イメ...
-
Minecraft 統合版(PC)の描画距...
-
ビューにビットマップファイル...
-
Pythonによる物理の斜方投射の...
-
この二つの違いは・・・?
-
ちらつきを何とかしたい
-
最前面に無理やりフォームを持...
-
Vba LongPtrについて教えてくだ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Minecraft 統合版(PC)の描画距...
-
[VB.net] DataGridViewの列ヘッ...
-
word
-
TextBoxに文字を書いても表示さ...
-
panelのスクロール表示について
-
google Colabでmatplotlibの描...
-
MFCでOnPaintのタイミング
-
CStaticコントロールの静的イメ...
-
VBAにGDI+を参照させる方法
-
Form1 Load で実行されない。
-
InvalidateRectの使い方について
-
CScrollViewの使用方法について
-
GDI+について
-
VC++プログラムをつかったBMP画...
-
ウインドウサイズを変更しても...
-
VB6,リストボックスの特定行の...
-
タブをオーナードローすると、...
-
ビットマップを表示させる(MFC)
-
UpdateData( FALSE); による文...
-
C++にて、塗りつぶされた円を描...
おすすめ情報