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

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

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

Re[16]: Form, TabPagの再描画などについてお教え下さい。


(過去ログ 99 を表示中)

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

■59143 / inTopicNo.1)  Form, TabPagの再描画などについてお教え下さい。
  
□投稿者/ mine (10回)-(2011/05/17(Tue) 12:27:22)

分類:[.NET 全般] 

VisualStudio2005(VB)で技術計算関係のプログラムを作りたいと思っています。
FormにtextBoxから数値を入力し、これから複雑な計算を行ってその計算式と結果を
表示印刷させたいのです。
1.Formへの表示は出来るのですがこれを印刷させようとするとPrintDocument1にFormに
書いたのと同じようなプログラムを書かなくては成りません。 同じようなプログラムを書かなくて
印刷させる方法は無いのでしょうか?
2.Formの表示は画面が重なったりすると消えてしまいます。 自動で再描画させてたいのですが
どの様にすればよいのでしょうか?
Form_Paintに計算のプログラムを書けば自動で再描画するのですがこれでは数値入力など細かい
操作ができないので困ります。
3.また計算が長くなった場合の画面Scrollや多ページにわたる印刷などにも問題があるようです。
このためTabPageを印刷に使用するA4に合わせて作成しここに1ページ分ずつ表示させていくことを
検討としていますが、この場合も画面Scrollで表示が消えてしまします。 どの様にすれば自動で再描画
させられるのでしょうか
4.複数のTabPageをページ毎に印刷指す方法についてもご指導下さい。

何分初心者でInternetで調べてみましたがなかなか適当な方法が見つかりません。
何方か是非ご指導下さい。 よろしくお願い申し上げます。
引用返信 編集キー/
■59148 / inTopicNo.2)  Re[1]: Form, TabPagの再描画などについてお教え下さい。
□投稿者/ よねKEN (702回)-(2011/05/17(Tue) 12:55:19)
No59143 (mine さん) に返信
> 1.Formへの表示は出来るのですがこれを印刷させようとするとPrintDocument1にFormに
> 書いたのと同じようなプログラムを書かなくては成りません。 同じようなプログラムを書かなくて
> 印刷させる方法は無いのでしょうか?

Formへの表示もPrintDocumentでの印刷もどちらの場合でも、
Graphicsクラスを使って表示内容/印刷内容を描画します。

Graphicsクラスを引数に取るようなメソッドを用意し、
その中で表示または印刷する内容を描画するようにしておけば1箇所の記述で済みます。

このメソッドを呼び出す側でForm由来のGraphicsオブジェクトか
PrintDocument由来のGraphicsオブジェクトのどちらを渡すかを切り替えます。

> 2.Formの表示は画面が重なったりすると消えてしまいます。 自動で再描画させてたいのですが
> どの様にすればよいのでしょうか?

CreateGraphicsメソッドを使っているのでしょうか?
このメソッドはほとんどのプログラムでは基本的には使いません。

> Form_Paintに計算のプログラムを書けば自動で再描画するのですがこれでは数値入力など細かい
> 操作ができないので困ります。

処理と描画は分離できます。
たとえば以下のように。
http://bbs.wankuma.com/index.cgi?mode=al2&namber=59134

> 3.また計算が長くなった場合の画面Scrollや多ページにわたる印刷などにも問題があるようです。
> このためTabPageを印刷に使用するA4に合わせて作成しここに1ページ分ずつ表示させていくことを
> 検討としていますが、この場合も画面Scrollで表示が消えてしまします。 どの様にすれば自動で再描画
> させられるのでしょうか

Paintイベントを使えば解決します。

> 4.複数のTabPageをページ毎に印刷指す方法についてもご指導下さい。

複数ページの印刷を行うには?[C#、VB]
http://www.atmarkit.co.jp/fdotnet/dotnettips/397printmoredoc/printmoredoc.html

場合によっては1.で説明した共通の描画ロジックで改ページの処理辺りは
画面か印刷かによって分ける必要がでてくるかもしません。(やりようによっては必要ないかもしれません)
その場合は、共通の描画ロジックの引数に画面/印刷を区別するための引数も用意するとよいですね。

引用返信 編集キー/
■59166 / inTopicNo.3)  Re[2]: Form, TabPagの再描画などについてお教え下さい。
□投稿者/ mine (11回)-(2011/05/17(Tue) 19:44:06)
No59148 (よねKEN さん) に返信
よねKEN さん早速にご指導有り難う御座います。

> Formへの表示もPrintDocumentでの印刷もどちらの場合でも、
> Graphicsクラスを使って表示内容/印刷内容を描画します。
> Graphicsクラスを引数に取るようなメソッドを用意し、
> その中で表示または印刷する内容を描画するようにしておけば1箇所の記述で済みます。
> このメソッドを呼び出す側でForm由来のGraphicsオブジェクトか
> PrintDocument由来のGraphicsオブジェクトのどちらを渡すかを切り替えます。

何分初心者ですので「Graphicsクラスを使って表示内容/印刷内容を描画します」を具体的にどの様に
したらよいのかが判りません。
厚かましい御願いですが具体的にどの様なプログラムを書くのかお教え頂けないでしょうか?

> CreateGraphicsメソッドを使っているのでしょうか?
> このメソッドはほとんどのプログラムでは基本的には使いません。

画面に文字や図形を表示、印刷するにはCreateGraphicsを使う物と思っておりましたがどの様にするのが
良いのでしょうか、具体的にお教え頂けませんでしょうか?

以上以外のお教え頂いた点についてはまだ検討出来ていません。
何れまたご指導を御願いすることになるのではと思いますがそのときはよろしくお願い申し上げます


引用返信 編集キー/
■59168 / inTopicNo.4)  Re[3]: Form, TabPagの再描画などについてお教え下さい。
□投稿者/ よねKEN (703回)-(2011/05/17(Tue) 21:13:41)
No59166 (mine さん) に返信
> 何分初心者ですので「Graphicsクラスを使って表示内容/印刷内容を描画します」を具体的にどの様に
> したらよいのかが判りません。
> 厚かましい御願いですが具体的にどの様なプログラムを書くのかお教え頂けないでしょうか?

 : 省略

>>CreateGraphicsメソッドを使っているのでしょうか?
>>このメソッドはほとんどのプログラムでは基本的には使いません。
>
> 画面に文字や図形を表示、印刷するにはCreateGraphicsを使う物と思っておりましたがどの様にするのが
> 良いのでしょうか、具体的にお教え頂けませんでしょうか?


上記に2点の両方に対してですが、先ほどの投稿でコメントした

> たとえば以下のように。
> http://bbs.wankuma.com/index.cgi?mode=al2&namber=59134

このURLの内容が返答になるかと思いますのでご覧ください。

引用返信 編集キー/
■59172 / inTopicNo.5)  Re[4]: Form, TabPagの再描画などについてお教え下さい。
□投稿者/ mine (12回)-(2011/05/18(Wed) 08:08:10)
No59168 (よねKEN さん) に返信
よねKEN さん 度々ご指導有り難う御座います。
> 上記に2点の両方に対してですが、先ほどの投稿でコメントした
>
>>たとえば以下のように。
>>http://bbs.wankuma.com/index.cgi?mode=al2&namber=59134
>
> このURLの内容が返答になるかと思いますのでご覧ください。
 
早速調べはしてみたのですがC#は全く判りませんので文献の内容が
十分理解出来ませんしコードを実行して試してみることも出来ません。
何れにしろ当方が希望しているようなことをやるには相当勉強しないと
ダメなようです。
ご指導重ねて御礼申し上げます。
引用返信 編集キー/
■59173 / inTopicNo.6)  Re[5]: Form, TabPagの再描画などについてお教え下さい。
□投稿者/ shu (691回)-(2011/05/18(Wed) 08:26:01)
2011/05/18(Wed) 08:27:55 編集(投稿者)

No59172 (mine さん) に返信

mineさんの書かれたコードを必要な部分だけ抜き出し掲載された方がよいかと思います。

> 早速調べはしてみたのですがC#は全く判りませんので文献の内容が
VB.NETとC#だと多少の違いはありますが、よく見れば分からないことはないソースしか
よねKEN さんの示されたリンク先には載っていないかと思います。よく見てみましょう。
何がわからないのか書いたほうがいいです。
・リンク先によく出てくるvoidはほとんどsubに置き換える
・if 〜 {

}
は if 〜 then で置き換える
・!= は <> で置き換える
・変数宣言はC#の場合
型 変数名
 となっているので
 変数名 as 型 で置き換える
・型[] 変数名は配列宣言なので 変数名() as 型で置き換える
これだけわかればリンク先のソースはほぼ読めるかと思います。がんばって下さい。


引用返信 編集キー/
■59181 / inTopicNo.7)  Re[6]: Form, TabPagの再描画などについてお教え下さい。
□投稿者/ よねKEN (706回)-(2011/05/18(Wed) 11:55:34)
提示したURLのコードはそういえばC#でしたね。
配慮が足りず申し訳ないです。>mineさん

No59173 (shu さん) に返信
> これだけわかればリンク先のソースはほぼ読めるかと思います。がんばって下さい。

shuさん、的確なフォローありがとうございます。

引用返信 編集キー/
■59182 / inTopicNo.8)  Re[7]: Form, TabPagの再描画などについてお教え下さい。
□投稿者/ よねKEN (707回)-(2011/05/18(Wed) 12:03:29)
2011/05/18(Wed) 12:06:19 編集(投稿者)
No59181 (よねKEN さん) に返信
> 提示したURLのコードはそういえばC#でしたね。
> 配慮が足りず申し訳ないです。>mineさん

提示URLの私の投稿のソースコード(断片)をVB風にしてみました。
手書きで書いていてコンパイルとかしていないので、
間違いがあると思いますので、おかしなところは適宜なおしてください。



'-----------------
' メモ:ファイルの先頭には以下のImports文をたぶん書く必要があるでしょう
'Imports System
'Imports System.Drawing

'----------------
'メモ:以下のコードはForm1などのクラスのコードの一部として記述します。
'前提:PictureBox1を配置する
'      PictureBox1_Click、PictureBox1_Paintメソッドの雛形となるコードは
'      デザイナから各イベントを選んで生成するようにする

' 描画対象の多角形の点
Private points As Point()

Private Sub PictureBox1_Click(ByVal sender As Object, ByVal e As EventArgs)
    ' 描画対象の点を設定
    points = New Point(){New Point(90, 10), New Point(20, 180), _
              New Point(190, 50), New Point(10, 70) , _
              New Point(160, 120)}

    ' 再描画を必要になったことを通知する
    PictureBox1.Invalidate()
End Sub

Private Sub PictureBox1_Paint(ByVal sender As Object, ByVal e As PaintEventArgs)
    ' ここではpoints変数に設定されていればClickされた後と判断することにした
    If points IsNot Nothing Then
        e.Graphics.FillPolygon(Brushes.Black, points, System.Drawing.Drawing2D.FillMode.Alternate)
    End If
End Sub

引用返信 編集キー/
■59186 / inTopicNo.9)  Re[8]: Form, TabPagの再描画などについてお教え下さい。
□投稿者/ mine (13回)-(2011/05/18(Wed) 14:24:09)
No59182 (よねKEN さん) に返信
よねKEN さん 度々ご指導有り難う御座います。
殆どやったことのないC#にご紹介頂いたコードを貼り付けて実行しようとしたのですがエラーとなり
実行出来ませんでした。 
> ' メモ:ファイルの先頭には以下のImports文をたぶん書く必要があるでしょう
> 'Imports System
> 'Imports System.Drawing
>
> '----------------
> 'メモ:以下のコードはForm1などのクラスのコードの一部として記述します。
> '前提:PictureBox1を配置する
> ' PictureBox1_Click、PictureBox1_Paintメソッドの雛形となるコードは
> ' デザイナから各イベントを選んで生成するようにする
>
> ' 描画対象の多角形の点
> Private points As Point()
>
> Private Sub PictureBox1_Click(ByVal sender As Object, ByVal e As EventArgs)
> ' 描画対象の点を設定
> points = New Point(){New Point(90, 10), New Point(20, 180), _
> New Point(190, 50), New Point(10, 70) , _
> New Point(160, 120)}
>
> ' 再描画を必要になったことを通知する
> PictureBox1.Invalidate()
> End Sub
>
> Private Sub PictureBox1_Paint(ByVal sender As Object, ByVal e As PaintEventArgs)
> ' ここではpoints変数に設定されていればClickされた後と判断することにした
> If points IsNot Nothing Then
> e.Graphics.FillPolygon(Brushes.Black, points, System.Drawing.Drawing2D.FillMode.Alternate)
> End If
> End Sub
このコードをVBで実行してみたのですが Private Sub PictureBox1_Click、
Private Sub PictureBox1_Paint(ByVal sender As Object, ByVal e As PaintEventArgs)
の記述の後にHandles文が抜けているのではありませんか?
ただし「PictureBox1_Click、PictureBox1_Paintメソッドの雛形となるコードは
デザイナから各イベントを選んで生成するようにする」にしたがって作業すればHandles文が自動で
ついて無事動作させることが出来ました。 PictureBox1_ClickでなくButton1_Clickも上手く動作することを
確認致しました。 
また
> 'Imports System
> 'Imports System.Drawing
は無くても問題なく動作するようです。
お陰で「処理と描画の分離」は解決です。 有り難う御座います。

またshuさんにも色々お教え頂き厚く御礼申し上げます。

よねKEN さんに再度の御願いなのですが
<CreateGraphicsメソッドを使っているのでしょうか?
<このメソッドはほとんどのプログラムでは基本的には使いません。
とご指導頂いていますが小生が色々調べたところでは描画は殆どCreateGraphicsメソッドを使っているように
思うのですがどの様にするのがよいのでしょうか?
また「Graphicsクラスを引数に取るようなメソッドを用意し」についても是非お教え頂きたく重ねてお願い申し上げます。
方法が判れば色々と挑戦してみます。

よろしくお願い申し上げます。



引用返信 編集キー/
■59190 / inTopicNo.10)  Re[9]: Form, TabPagの再描画などについてお教え下さい。
□投稿者/ shu (693回)-(2011/05/18(Wed) 15:36:42)
No59186 (mine さん) に返信

> よねKEN さんに再度の御願いなのですが
> <CreateGraphicsメソッドを使っているのでしょうか?
> <このメソッドはほとんどのプログラムでは基本的には使いません。
> とご指導頂いていますが小生が色々調べたところでは描画は殆どCreateGraphicsメソッドを使っているように
> 思うのですがどの様にするのがよいのでしょうか?
PictureBox1.Invalidate()を行うとPictureBoxのPaintイベントが発生するのでそこで処理するのが良いと言ってます。


> また「Graphicsクラスを引数に取るようなメソッドを用意し」についても是非お教え頂きたく重ねてお願い申し上げます。
> 方法が判れば色々と挑戦してみます。

Private Sub AAA(grp as Graphics)
    〜
End Sub

こういうことですが、分かりますか?



引用返信 編集キー/
■59191 / inTopicNo.11)  Re[9]: Form, TabPagの再描画などについてお教え下さい。
□投稿者/ よねKEN (708回)-(2011/05/18(Wed) 15:43:39)
2011/05/18(Wed) 15:49:58 編集(投稿者)
No59186 (mine さん) に返信
> このコードをVBで実行してみたのですが Private Sub PictureBox1_Click、 
> Private Sub PictureBox1_Paint(ByVal sender As Object, ByVal e As PaintEventArgs)
> の記述の後にHandles文が抜けているのではありませんか?

抜けてますね。

> ただし「PictureBox1_Click、PictureBox1_Paintメソッドの雛形となるコードは
>  デザイナから各イベントを選んで生成するようにする」にしたがって作業すればHandles文が自動で
> ついて無事動作させることが出来ました。 PictureBox1_ClickでなくButton1_Clickも上手く動作することを
> 確認致しました。 

その対応でOKです。

> また
>>'Imports System
>>'Imports System.Drawing
> は無くても問題なく動作するようです。

VBの新規プロジェクトではデフォルトで上記の名前空間は自動的にインポートされる設定になっているからですね。

> よねKEN さんに再度の御願いなのですが
> <CreateGraphicsメソッドを使っているのでしょうか?
> <このメソッドはほとんどのプログラムでは基本的には使いません。
> とご指導頂いていますが小生が色々調べたところでは描画は殆どCreateGraphicsメソッドを使っているように
> 思うのですがどの様にするのがよいのでしょうか?

確かにサンプルではCreateGraphicsメソッドを使っている例は多いですね。
サンプルの本題として説明したい内容が、例えばGraphicsクラスのDraw〜、Fill〜なメソッドの
使用方法だったりするのですが、これらを使うにはまずGraphicsオブジェクトを用意しなければなりません。
Graphicsオブジェクトの用意する方法の部分をきちんと説明すると話が長くなりますが、
本題を簡潔に説明するには邪魔なので、Graphicsオブジェクトを簡単に用意するための便宜として
CreateGraphicsメソッドを使っているのです。

でも、CreateGraphicsメソッドを使って画面に描画をしていると他のウィンドウなどの陰に隠れると
描画した内容が消えてしまいますよね。これでは実用上の問題があります。
で、一般的で実践的なGraphicsオブジェクトを用意する手段が、
Paintイベントでイベント引数eのGraphicsプロパティを使うことです。
これは私の提示したサンプルでもやっていることです。

> また「Graphicsクラスを引数に取るようなメソッドを用意し」についても是非お教え頂きたく重ねてお願い申し上げます。
> 方法が判れば色々と挑戦してみます。

以下はイメージです。こんな感じのものを用意しておいて、
引数にはPaintイベントのe.Graphicsなどを渡す、ということです。

'--- あくまでコードのイメージです。 〜は適当に省略しているだけ
Private Sub Draw画面やプリンタに出力したい内容(ByVal g As Graphics)
      ' 割り算の筆算を表示/印刷するイメージ
      g.DrawString(〜) ' 答えを出力して
      g.DrawLine(〜)  ' 線引いて
      g.DrawCurve(〜) ' 割り算の左側のカーブ部分
      g.DrawString(〜) ' 割る数
      g.DrawString(〜) ' 割られる数
      ' 以下のループはもちろん適当ですよ!
      For 計算過程 = 0 To 計算過程の数
          g.DrawString(〜) ' 計算過程1を出力して
          g.DrawString(〜) ' 計算過程2を出力して
          g.DrawLine(〜)  ' 線引いて
      Next
      g.DrawString(〜) ' 余りを出力
End Sub

引用返信 編集キー/
■59192 / inTopicNo.12)  Re[10]: Form, TabPagの再描画などについてお教え下さい。
□投稿者/ mine (14回)-(2011/05/18(Wed) 15:58:26)
No59191 (よねKEN さん) に返信
よねKEN さん度々ご指導有り難う御座います。
> 本題を簡潔に説明するには邪魔なので、Graphicsオブジェクトを簡単に用意するための便宜として
> CreateGraphicsメソッドを使っているのです。
>
> でも、CreateGraphicsメソッドを使って画面に描画をしていると他のウィンドウなどの陰に隠れると
> 描画した内容が消えてしまいますよね。これでは実用上の問題があります。
> で、一般的で実践的なGraphicsオブジェクトを用意する手段が、
> Paintイベントでイベント引数eのGraphicsプロパティを使うことです。
> これは私の提示したサンプルでもやっていることです。
良くわかりましした。 色々検討してみます。

> 以下はイメージです。こんな感じのものを用意しておいて、
> 引数にはPaintイベントのe.Graphicsなどを渡す、ということです。
>
> '--- あくまでコードのイメージです。 〜は適当に省略しているだけ
> Private Sub Draw画面やプリンタに出力したい内容(ByVal g As Graphics)
> ' 割り算の筆算を表示/印刷するイメージ
> g.DrawString(〜) ' 答えを出力して
> g.DrawLine(〜) ' 線引いて
> g.DrawCurve(〜) ' 割り算の左側のカーブ部分
> ' 以下のループはもちろん適当ですよ!
> For 計算過程 = 0 To 計算過程の数
> g.DrawString(〜) ' 計算過程1を出力して
> g.DrawString(〜) ' 計算過程2を出力して
> g.DrawLine(〜) ' 線引いて
> Next
> End Sub

お手数をお掛けしました。 これも色々検討してみます。

ところで先に処理と表示の分離は解決したと申し上げたのですが
TabPageに表示させると画面の重なりでは消えませんがScrollすると消えてしまいます。
PictureBoxに表示させればScrollでも画面の重なりでも消えません。 なぜなのでしょうか?

度々のご指導重ねて御礼申し上げます。
引用返信 編集キー/
■59193 / inTopicNo.13)  Re[10]: Form, TabPagの再描画などについてお教え下さい。
□投稿者/ mine (15回)-(2011/05/18(Wed) 16:01:39)
No59190 (shu さん) に返信
sue さんご指導有り難う御座います。
>>また「Graphicsクラスを引数に取るようなメソッドを用意し」についても是非お教え頂きたく重ねてお願い申し上げます。
>>方法が判れば色々と挑戦してみます。
>
> Private Sub AAA(grp as Graphics)
> 〜
> End Sub
>
> こういうことですが、分かりますか?
色々と検討してみます。 
引用返信 編集キー/
■59204 / inTopicNo.14)  Re[11]: Form, TabPagの再描画などについてお教え下さい。
□投稿者/ よねKEN (709回)-(2011/05/19(Thu) 09:56:43)
2011/05/19(Thu) 09:57:06 編集(投稿者)
No59192 (mine さん) に返信
> ところで先に処理と表示の分離は解決したと申し上げたのですが
> TabPageに表示させると画面の重なりでは消えませんがScrollすると消えてしまいます。
> PictureBoxに表示させればScrollでも画面の重なりでも消えません。 なぜなのでしょうか?

どのような方法で実装しているかの説明もなく、
問題を確認できるソースコードの提示もない状況では何とも言えません。

どのような方法で…に関して言うと
(1)「TabPageに表示させる」というのがどういうことなのかももう少し詳しい説明が必要

  なぜかと言うと、TabPageに対して直接描画するような実装はあまりしないので、
TabPageに直接描画しているのだろうか?あるいは、TabPageの上に何かコントロールを配置して、
そこに描画しているのだろうか?Scrollする、というのはTabPageのAutoScroll系の機能を使って実装しているのか?
などいくつもの疑問がわくからです。

(2) 「PictureBoxに表示させればScrollでも」というのがどういうことなのかももう少し詳しい説明が必要
  PictureBoxにスクロールさせる機能はないはずなので、何かのスクロール機能を使っているはずですが、
何をどうやっているのだろう?
  
上記のような点も踏まえて、言葉でわかりやすく説明するのは簡単ではないので、
「問題を確認できるソースコードの提示」があるとよいですね。
実際に今作っているコードではなく、今作っているコードから問題の再現に関係のない部分を省いて行って、
問題を確認できる範囲で最小限のソースコードにした上で、その全部を提示するのがお勧めです。

引用返信 編集キー/
■59213 / inTopicNo.15)  Re[12]: Form, TabPagの再描画などについてお教え下さい。
□投稿者/ mine (16回)-(2011/05/19(Thu) 12:01:30)
No59204 (よねKEN さん) に返信
よねKEN さん度々のご指導有り難う御座います。
> どのような方法で実装しているかの説明もなく、
> 問題を確認できるソースコードの提示もない状況では何とも言えません。
> 
> どのような方法で…に関して言うと
> (1)「TabPageに表示させる」というのがどういうことなのかももう少し詳しい説明が必要
> 
>   なぜかと言うと、TabPageに対して直接描画するような実装はあまりしないので、
> TabPageに直接描画しているのだろうか?あるいは、TabPageの上に何かコントロールを配置して、
> そこに描画しているのだろうか?Scrollする、というのはTabPageのAutoScroll系の機能を使って実装しているのか?
> などいくつもの疑問がわくからです。
> 
> (2) 「PictureBoxに表示させればScrollでも」というのがどういうことなのかももう少し詳しい説明が必要
>   PictureBoxにスクロールさせる機能はないはずなので、何かのスクロール機能を使っているはずですが、
> 何をどうやっているのだろう?
>   
> 上記のような点も踏まえて、言葉でわかりやすく説明するのは簡単ではないので、
> 「問題を確認できるソースコードの提示」があるとよいですね。
> 実際に今作っているコードではなく、今作っているコードから問題の再現に関係のない部分を省いて行って、
> 問題を確認できる範囲で最小限のソースコードにした上で、その全部を提示するのがお勧めです。

ソースコードの提示をしないで質問しまして申し訳ありません。
色々試行錯誤中で提示出来るようなちゃんとしたコードが出来ていなかったので失礼しました。
その後修正を行い、Invalidateも含めたコードを完成しました。
FormにはPictureBox1,これをScrollさせるためのVScrollBar1、TabPage1(AutoScroll=True), 文字や図形を表示させるための
Button1が配置してあります。 コードは次の通りです。

Public Class Form1
    ' 描画対象の多角形の点
    Private points As Point()
    'Invalidate前に描画されないようにするためのFlag
    Dim flgShow As Boolean = False
    Dim Fonts As New Font("MS 明朝", 12)
    '************************************************************
    ' PictureBox1への描画
    '************************************************************
    Private Sub PictureBox1_Paint(ByVal sender As Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles PictureBox1.Paint
        If flgShow = True Then
            Call DrawPic(e.Graphics)
        End If
    End Sub
    '************************************************************
    ' TabPage1への描画
    '************************************************************
    Private Sub TabPage1_Paint(ByVal sender As Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles TabPage1.Paint
        If flgShow = True Then
            Call DrawPic(e.Graphics)
        End If
    End Sub
    '************************************************************
    ' PictureBox1、TabPage1への描画コード
    '************************************************************
    Private Sub DrawPic(ByVal g As Graphics)
        Dim Fonts As New Font("MS 明朝", 12)
        g.DrawString("AAAAAAAAA", Font, Brushes.Black, 100, 200)
        g.DrawString("BBBBBBBBB", Font, Brushes.Black, 100, 230)
        points = New Point() {New Point(90, 10), New Point(20, 180), _
New Point(190, 50), New Point(10, 70), _
New Point(200, 180)}
        g.FillPolygon(Brushes.Black, points, System.Drawing.Drawing2D.FillMode.Alternate)
    End Sub
    '************************************************************
    ' PictureBox1のVScroll
    '************************************************************
    Private Sub VScrollBar1_Scroll(ByVal sender As System.Object, ByVal e As System.Windows.Forms.ScrollEventArgs) Handles VScrollBar1.Scroll
        VScrollBar1.Maximum = 1000
        PictureBox1.Top = VScrollBar1.Value
    End Sub

    '************************************************************
    ' Button1_Clickによる描画の実行
    '************************************************************
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        flgShow = True
        PictureBox1.Invalidate()
        TabPage1.Invalidate()
    End Sub
End Class

これでTabPage1をScrollすると消えること以外は問題なく動作しています。
ご指導頂ければ有り難いです。 よろしくお願い申し上げます。

引用返信 編集キー/
■59217 / inTopicNo.16)  Re[11]: Form, TabPagの再描画などについてお教え下さい。
□投稿者/ shu (698回)-(2011/05/19(Thu) 13:24:28)
No59193 (mine さん) に返信

コントロールはすべてフォームの上に直接配置されているのですか?
TabPage1はなぜスクロールするのですか?
引用返信 編集キー/
■59218 / inTopicNo.17)  Re[12]: Form, TabPagの再描画などについてお教え下さい。
□投稿者/ mine (17回)-(2011/05/19(Thu) 13:34:50)
No59217 (shu さん) に返信
> コントロールはすべてフォームの上に直接配置されているのですか?
> TabPage1はなぜスクロールするのですか?
コントロールはすべてフォームの上に直接配置されています。
TabPage1は実際はA4サイズを予定していてその全部を画面に表示出来ないためScrollしようと思っています。
No59204 (よねKEN さん) に返信に作成したコードなどを記載していますので是非チェックしてみて下さい。
よろしくお願い申し上げます。

引用返信 編集キー/
■59220 / inTopicNo.18)  Re[13]: Form, TabPagの再描画などについてお教え下さい。
□投稿者/ shu (699回)-(2011/05/19(Thu) 13:46:28)
No59218 (mine さん) に返信

> TabPage1は実際はA4サイズを予定していてその全部を画面に表示出来ないためScrollしようと思っています。
プレビュー画面ですね。PrintPreviewControlでは駄目ですか?そしてTabPage1にコントロールがないのにScrollが
出来てしまうのが分からないのですが、そんなことって出来ましたっけ?


引用返信 編集キー/
■59222 / inTopicNo.19)  Re[14]: Form, TabPagの再描画などについてお教え下さい。
□投稿者/ mine (18回)-(2011/05/19(Thu) 14:42:19)
No59220 (shu さん) に返信
shu さんご連絡有り難う御座います。
>>TabPage1は実際はA4サイズを予定していてその全部を画面に表示出来ないためScrollしようと思っています。
> プレビュー画面ですね。PrintPreviewControlでは駄目ですか?そしてTabPage1にコントロールがないのにScrollが
> 出来てしまうのが分からないのですが、そんなことって出来ましたっけ?
TabPageはPreviewの為でなく複雑な計算式をページ毎に表示、印刷するのに利用したいと考えています。
ただしTabPageを使うのは初めてなので正解かどうかは判りません。
なおScrollはControl無しでも出来るようです。
引用返信 編集キー/
■59223 / inTopicNo.20)  Re[14]: Form, TabPagの再描画などについてお教え下さい。
 
□投稿者/ よねKEN (713回)-(2011/05/19(Thu) 14:42:23)
No59220 (shu さん) に返信
> ■No59218 (mine さん) に返信
> 
>>TabPage1は実際はA4サイズを予定していてその全部を画面に表示出来ないためScrollしようと思っています。
> プレビュー画面ですね。PrintPreviewControlでは駄目ですか?そしてTabPage1にコントロールがないのにScrollが
> 出来てしまうのが分からないのですが、そんなことって出来ましたっけ?

できませんね。 

No59213 のコードを動かしてみました(コントロールの構成は下図の通り)が、
そもそもTabPage1にはスクロールバーが表示されないので、スクロールさせてみること自体ができません。

Form1
├ PictureBox1
├ VScrollBar1
├ Button1
└ TabControl1
   ├ TabPage1
   └ TabPage2

mineさんが提示されている情報からでは現象の再現を試みること自体ができない状態ですので、
(mineさんから提示されていない)何か前提があるのではないかと思います。

引用返信 編集キー/

次の20件>
トピック内ページ移動 / << 0 | 1 >>

管理者用

- Child Tree -