tagCANDY CGI VBレスキュー(花ちゃん) の Visual Basic 2010 用 掲示板(VB.NET 掲示板) [ツリー表示へ]   [Home]
一括表示(VB.NET VB2005)
タイトルユーザーコントロールの再初期化表示
記事No10130
投稿日: 2010/06/06(Sun) 00:08
投稿者もすら
お世話になります。
VB経験は1年未満で、現在VB2005を使用しています。(OSはVistaです)
以下に目標アプリとそれに対する現在困っている内容を質問させていただきます。

質問タイトル ユーザーコントロールを使ったアプリを実行後、再初期化
      (初期画面に戻す)する方法を教えてください。

目標アプリケーション : FORM上にいくつかのユーザーコントロールを組み合わせ
             1つのアプリケーションを作成し、そして計測器からデータ
             を取得、処理し表示、クリアボタンでFORM上を全てクリアし、
             再計測を行う。

質問 : 再測定を行う際、クリアボタン1つで初期画面に戻す事ができません。
     クリアボタンで全変数に初期値を再代入すれば値は初期化されるでしょうが
     表示の値はクリアされません。
     ユーザーコントロールのDisposeや、再表示(これがうまくできません)
     を使えば、アプリの初期化が簡単に間違いなくできると思っているのですが
     この画面の再初期化できる方法を教えて頂けないでしょうか

     現在は アプリを一度closeして、アプリを再実行させるという、非効率な
     方法でおこなっています。
       
     すみませんが、アドバイスお願いします。

[ツリー表示へ]
タイトルRe: ユーザーコントロールの再初期化表示
記事No10131
投稿日: 2010/06/06(Sun) 04:43
投稿者keisuke
こんにちは、、
フォームの再描画するメソッドがありますので、
Me.Refresh()とかを使えばとか思いますが、、、コントロールをすべてというのとは違うし
フォームの初期化する命令です。

public sub new()
MyBase.new
InitializeComonent()
End sub

[ツリー表示へ]
タイトルRe^2: ユーザーコントロールの再初期化表示
記事No10132
投稿日: 2010/06/06(Sun) 23:24
投稿者もすら
お返事有難うございます
早速試してみましたが、FORMに貼り付けた複数のユーザーコントロール
の内容は初期化されず、表示も元のままでした。
各ユーザーコントロールに
 public sub new()
 MyBase.new
 InitializeComonent()
 (変数の初期化コードをここに記入)
 End sub
FORMに
  ボタンを押したイベントで 
  Me.Refresh()
  を実行させてみました。
これでは不十分なのでしょうか。

[ツリー表示へ]
タイトルRe^3: ユーザーコントロールの再初期化表示
記事No10133
投稿日: 2010/06/07(Mon) 09:19
投稿者るしぇ
>  ボタンを押したイベントで 
>  Me.Refresh()
>  を実行させてみました。
現在設定されているプロパティ値で画面の再描画が行なわれます。
> 全変数に初期値を再代入すれば値は初期化されるでしょうが
> 表示の値はクリアされません。
初期値を再代入しているなら、その値で描画処理が実行されます。
表示されないなら、同じ画面(のインスタンス)をメモリ上に複数
作ってしまってるとか、コード上のバグがあるのでは?

[ツリー表示へ]
タイトルRe^3: ユーザーコントロールの再初期化表示
記事No10137
投稿日: 2010/06/07(Mon) 12:43
投稿者keisuke
Refresh()はこちらを参考にしてみて下さい。
http://dobon.net/vb/dotnet/control/refreshupdateinvalidate.html
フォームの初期化はこちらで
http://blog.livedoor.jp/akf0/archives/51308499.html

[ツリー表示へ]
タイトルRe^4: ユーザーコントロールの再初期化表示
記事No10138
投稿日: 2010/06/08(Tue) 00:14
投稿者もすら
るしぇさん、
keisukeさん

アドバイス有難うございます。
Refresh勉強して、再度トライしてみます。

ユーザーコントロールで値を表示する部分の変数を
プロパティで全部作っていない事が原因なのかなって
思ってます。
私の認識を大げさに言えば Refresh=アプリの再起動って
感じでとっていたので、再表示する際には値再設定して
おくという概念がなかったので。

この解釈間違えていたらまた指摘してください。

とにかくトライしてみます。
有難うございました。

[ツリー表示へ]
タイトルRe^5: ユーザーコントロールの再初期化表示
記事No10140
投稿日: 2010/06/09(Wed) 17:39
投稿者keisuke
formの初期化についてこのサイトが参考になります。

http://www.bnote.net/vb/clearcontrols.shtml

[ツリー表示へ]
タイトルRe^6: ユーザーコントロールの再初期化表示
記事No10141
投稿日: 2010/06/12(Sat) 22:06
投稿者もすら
こんばんわ。

何度Refreshコマンド使っても 表示変わらない
(ユーザーコントロール内のプロパティ値は変わっているようですが)

ユーザーコントロール内
      Dim _ABC as String = "CLR"
      Public Property ABC as String
         :
      end

   Public Sub ClrUserDisp ()
         ABC = "CLR"
      end Sub
Form側
     Sub Button1_click (イベント)・・・
     xUserControl1.ClrUserDisp()
     Me.Refresh()
   end
としていましたが Refresh()しても値変わらないので 
   ユーザーコントロール側に
          ABC = "CLR"
     textbox1.text=ABC   <----- 追加
を追加しました。
各コントロールのプロパティをRefreshメソッドで初期化
(初期化+再表示)できるものと思っていました。
各コントロールに地道に追加していくつもりです。

[ツリー表示へ]
タイトルRe: ユーザーコントロールの再初期化表示
記事No10134
投稿日: 2010/06/07(Mon) 09:24
投稿者
> 質問 : 再測定を行う際、クリアボタン1つで初期画面に戻す事ができません。
>      クリアボタンで全変数に初期値を再代入すれば値は初期化されるでしょうが
>      表示の値はクリアされません。
>      ユーザーコントロールのDisposeや、再表示(これがうまくできません)
>      を使えば、アプリの初期化が簡単に間違いなくできると思っているのですが
>      この画面の再初期化できる方法を教えて頂けないでしょうか

手元に環境が無く、実際に試していないのでできるか分かりませんが…
現在のFormを(A)として、初期化ボタン押下で別のForm(B)を呼び出して(A)は閉じる。
そのあと(B)から新しく(A)を呼び出して(B)を閉じるようにしたらどうでしょう?

(B)には「プログラムを初期化しています」とでも表示させておいて
グローバルな変数等の初期化を行うとか。

見当違いなこと言ってたらごめんなさい。

[ツリー表示へ]
タイトルRe^2: ユーザーコントロールの再初期化表示
記事No10139
投稿日: 2010/06/08(Tue) 00:17
投稿者もすら
ありがとうございます

なるほど。そういう手もありますね。
B)にA)の必要な値保持させておいてA)が
再起動後、初期状態にB)からA)に保存しておいた
必要な値を戻すなんてこともできそうですね。

なるほど。
有難うございました。

[ツリー表示へ]