ここから質問投稿すると、最大4000ポイント当たる!!!! >>

.NET初心者です。
スプラッシュスクリーンについてお尋ねします。スクリーンを自動で閉じるのではなく、手動で(ボタンのクリックで)閉じるようにしたいのですが、
http://msdn.microsoft.com/ja-jp/library/cc681209 …
http://msdn.microsoft.com/ja-jp/library/system.w …によると
ScreenSprashのShowメソッドでautoCloseをFalseにすれば手動でスクリーンを閉じることが出来ると書いてあるのですが、これはApplicationEvents.vbに書き込めば良いのでしょうか?それともスクリーンにでしょうか?

また、Showメソッドの使い方も良く分かりません。
構文がPublic Sub Show(ByVal autoClose As Boolean)としてあったので、ためしに
Public Sub Show(ByVal autoClose As Boolean)
autoClose = False
End Sub
としてみました。案の定ですが動きません。

もう一つ、Closeメソッドの構文を見ると
Public Sub Close ( _
fadeoutDuration As TimeSpan _
)
と、時間制がとられているのですが、これをタイムスパンではなくボタンクリックでスクリーンを終了するようにしたいのですが、このメソッドで出来るのでしょうか?

スプラッシュスクリーンを使用することが先方の要望のため代替作戦が利かず、かつ調べても使用例が出てこなくて困ってます。あってもC言語でした。

このQ&Aに関連する最新のQ&A

A 回答 (4件)

メインのFormのLoadイベントで行っても同じことだと思いますよ


普通は Applicationクラスってあんまり弄りませんからね
    • good
    • 0
この回答へのお礼

わかりました、ありがとうございました!

お礼日時:2011/12/02 12:00

プロジェクトのプロパティのアプリケーションタブの『スプラッシュスクリーン』に SplashScreen1を設定しているのであれば 『(なし)』に変更しましょう



アプリで自動で生成するスプラッシュと Startupイベントで表示しようとするスプラッシュがぶつかってしまってエラーになっているようですよ
    • good
    • 0

どの段階で例外がスローされるのでしょう?



MyApplication_Startupの中にブレークポイントを設置してF11キーでステップ実行して原因の究明をしていただけませんか

当方では InvalidOperationException は起きておりません
また 確認は VB2005で行っております

投稿する際には開発環境の状況 VS2010やVB2008などの情報もあるいいと思いますよ

この回答への補足

開発環境はVB2010です。
ステップ実行での原因究明のしかたがいまいち良く分かっていないのでredfox63さんが求めているものがこれなのかよくわかりませんが、(もし違っていたら実行結果の読み方を教えてください)
splash.ShowDialog()
のところでエラーが起きている様子です。

補足日時:2011/12/01 17:03
    • good
    • 0
この回答へのお礼

先ほど気づいたのですが、プロジェクトのプロパティで、「アプリケーションイベントの表示」横にある「スプラッシュスクリーン」でSprashScreen1を選択していたため、エラーが生じていたようです。スクリーンが二重起動することになってしまったために生じたのではないか?との見解ですが・・・

スプラッシュスクリーンを「なし」に設定するとエラーは生じなくなりました。
しかしきちんと起動されて思ったのですが、redfox63さんが教えてくれた方法やコードと、スタートアップフォームのLoadイベントでShowDialogメソッドを使った場合の動きが同じように思えるのです。
これらは同一のものなのでしょうか?

お礼日時:2011/12/01 17:42

お示しのURLの内容は WPFのものですが 大丈夫でしょうか?



.NETのWindowsFormアプリですと別のアプローチになりますよ

WPFのSplushScreenクラスですとイメージファイルを指定して構築となっているのでボタンの追加などが出来ないみたいですよ


WindowsFormの場合新規の項目の追加で『スプラッシュスクリーン』を追加します
このフォーム上にボタンを追加して Clickイベントに
DialogResult = DialogResult.OK
Me.Close()
を記述します

プロジェクト > 『プロジェクト名』のプロパティ > アプリケーションタブ の下部の『アプリケーションイベントの表示』をクリック

(全般)を(MyApplicationのイベント)に変更
Startupを選択

dim splash as SplashScreen1 = Global.VBEX002.SplushScreen1
slpush.ShowDialog()
と記述

SplashScreen1 = Global.VBEX002.SplushScreen1
の SplashScreen1は スプラッシュスクリーンの追加を行ったときのクラス名です
VBEX002はアプリケーションのプロジェクト名です
ご自身の環境に合わせて修正してください
    • good
    • 0
この回答へのお礼

うわ、すみません。WPF用だと気づいていませんでした。
教えてもらった方法を試してみたのですが、InvalidOperationException はハンドルされませんでした
というエラーが出てしまいます。
ヘルプを見たところ、Invoke メソッドというのを使うようですが、それでいいのでしょうか?

お礼日時:2011/12/01 15:34

このQ&Aに関連する人気のQ&A

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

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

QCloseとDisposeの違い

みなさまこんばんわです。よろしくお願い申し上げます。

VB.NET 2008でコーディングしています。
CloseとDisposeの違いについて教えていただきたいのです。

これらのメソッドは、開いたファイルを閉じるときなどにも使いますが、今回お尋ねするのは、フォームを閉じるとき、しかも、自ら呼び出すとき(Me.Close() と、Me.Dispose() )のみに限ったこととしてお話しさせていただきます。

たとえば、ShowDialog() で呼び出したフォームは、そのフォーム内でMe.Close() しても、プロセスは残り、たとえば、タイマーコントロールのイベントに記述していますと、それは実行され続けます。

これを防ぐために、Me.Dispose() を使います。すると、きれいにプロセスは終了し、イベントは発生しない模様です。

そこで、「フォームを閉じる」意味のMe.Close() をすべてMe.Dispose() に変えてしまいました。確実にプロセスを破棄出来ると思ったからです。Webで調べると、違いは「再利用できる、できないの違い」という答えがありましたが、それはきっと、ファイルやオブジェクトのことで、フォームの場合は、再びShowまたはShowDialogで表示させることは可能でしたので、特に問題は感じていませんでした。

ところが、アプリケーション設定で、「最後のフォームを閉じるとき」にアプリケーションがシャットダウンする設定になってるのに、シャットダウンしてくれないことが起こりました。調べてみると、Me.Dispose() が原因。Me.Close() に変えるとうまくいきました。

わけわからなくなってきました。。。

ちなみに、その残ったフォームは、スタートアップフォームであり、別のフォームからShowまたはShowDialogメソッドで呼び出したものではありません。

ここで4つの仮説を立ててみました。

1. ShowDialogで呼び出したフォームは、Me.Dispose()、Showで呼び出した、あるいは、スタートアップフォームは、Me.Close() すれば破棄できる

2. ShowDialogで呼び出したフォームは、Me.Dispose()、スタートアップフォームは、Me.Close()、Showで呼び出したフォームは、どちらでも、破棄できる

3. 呼び出し方ではなく、別の要因が存在する

4. 併記する必要がある場合がある

Me.Close()
Me.Dispose()

または、

Me.Dispose()
Me.Close()



どれが正しいのでしょうか?どなたがご存じの方がいらっしゃいましたら、ご教授いただけませんでしょうか? どうぞよろしくお願い申し上げます。ありがとうございました。

みなさまこんばんわです。よろしくお願い申し上げます。

VB.NET 2008でコーディングしています。
CloseとDisposeの違いについて教えていただきたいのです。

これらのメソッドは、開いたファイルを閉じるときなどにも使いますが、今回お尋ねするのは、フォームを閉じるとき、しかも、自ら呼び出すとき(Me.Close() と、Me.Dispose() )のみに限ったこととしてお話しさせていただきます。

たとえば、ShowDialog() で呼び出したフォームは、そのフォーム内でMe.Close() しても、プロセスは残り、たとえば、...続きを読む

Aベストアンサー

Me.Close()
Me.Dispose()
は根本的に違うものです。

formについて、Close()メソッドはフォームの表示を終了させるメソッドです。

ほかのクラスも同様。すべてのDispose()メソッドについて、これはインスタンスの破棄を明示的に行うものです。

>再利用できる、できないの違い

Dispose()はインスタンスが破棄されるため、再びコンストラクタを用いて、インスタンスを生成しないいけません。

一方Close()はインスタンスが残っているので、それを利用することができます。

>1. ところが、アプリケーション設定で、「最後のフォームを閉じるとき」にアプリケーションがシャットダウンする設定になってるのに、シャットダウンしてくれないことが起こりました。調べてみると、Me.Dispose() が原因。
Me.Close() に変えるとうまくいきました。

通常はどちらでもうまくいきます。

>2. ShowDialogで呼び出したフォームは、Me.Dispose()、スタートアップフォームは、Me.Close()、Showで呼び出したフォームは、どちらでも、破棄できる

ShowDialogの場合は、メソッド内部で、ハンドルが破棄されているため、Close()メソッドの際にDispose()メソッドが呼び出されます。

>3. 呼び出し方ではなく、別の要因が存在する

そう思います。

>4. 併記する必要がある場合がある

インスタンスを明示的に破棄したほうがよい場合は多く存在します。
Disposeが使えるメンバはIDisposableをインターフェースとして持っているメンバです。
これらのメンバは、外部とのやり取りを行うものが多くあります。
たとえばSQLClientに含まれるようなメンバです。

外部とのコネクションを確実に破棄を保障してほしいなどという場合がありますよね、このようなときに使用します。

Using構文を使用するのとまったく同じ理由になります。
正確にはUsing構文を使用できるメンバには条件があります、IDisposableをインターフェースとして持っているメンバに限るというものです。

ほかにもガーベージコレクタによるファイナライズを伴うかどうかという違いがあります。
Disposeの場合はファイナライズが同時に行われるため、使用していたメモリ空間を開放することができます。

上記のような理由により、
Me.Close()
Me.Dispose()
は両方書いたほうがよいと思います。

蛇足ですが、
Me.Dispose()
Me.Close()
はエラーになります。
Me.Dispose()により、Me本体(インスタンス)は削除されてしまいます。
存在しないMeに対してCloseメソッドを要求することはできないためです。

Me.Close()
Me.Dispose()
は根本的に違うものです。

formについて、Close()メソッドはフォームの表示を終了させるメソッドです。

ほかのクラスも同様。すべてのDispose()メソッドについて、これはインスタンスの破棄を明示的に行うものです。

>再利用できる、できないの違い

Dispose()はインスタンスが破棄されるため、再びコンストラクタを用いて、インスタンスを生成しないいけません。

一方Close()はインスタンスが残っているので、それを利用することができます。

>1. ところが、アプリ...続きを読む

QDataTableから条件を満たした行を別のDatatableへコピーしたい

VC#2005とSQLServer2005ExpressEditionでWindowsアプリケーションを作成しています。

データベースの中から1つのマスタテーブルのデータを呼び出すのにTableAdapterを使ってDataTableにデータをバインドしました。
そこから条件を満たしている行をすべて抽出して同じ型のDataTableにデータをコピーしたいのです。

ですから、DataTableは2つ用意しています。1つは上記の通りデータをバインドしていますが、もう1つは宣言しただけなのでまだ空っぽの状態です。
DataTableにはカラムが3列あり、その中の1列をグループIDとしています。
条件としてはグループIDが同じであるということです。
やりたいことは条件を満たしている行をすべて抽出して空のデータテーブルにコピーすることです。

どなたかご存知の方いらっしゃれば教えてください。
よろしくお願いします。

Aベストアンサー

C#だったんですね … さほど変わりないと思いますが

お使いのコードが提示されていないのでこちらで適当な変数をでっち上げております
現在お使いのコードを支障の無い範囲で提示しましょう

//元のデータテーブルがdtSourceとすると
// テーブル構造をコピー
DataTable dt = dtSource.Clone();
DataRow r = null;
foreach( DataRow dtRow in dtSource.Select("選択するための文字列"))
{
  r = dt.NewRow();
  for( int n = 0; n < dtRow.ItemArray.Length; n++ )
  {
    r[n] = dtRow[n];
  }
  dt.Rows.Add( r );
}
といった具合になると思います

# 前回の投稿中のstSorceはdtSourceの単なるミスです

QVB.NETでラベルの大きさってどうやって変えるの?

VB.NETでラベルの大きさってどうやって変えるの?
バージョンは2008

Aベストアンサー

あれ?
普通に
Widthプロパティ
http://msdn.microsoft.com/en-us/library/system.windows.forms.control.width%28VS.100%29.aspx
やHeightプロパティを変更すればできるはずだけど、コード、IDE問わず。
http://msdn.microsoft.com/en-us/library/system.windows.forms.control.height%28VS.100%29.aspx

#まぁAutoSizeプロパティをfalseにしないと、Textプロパティに代入された文字列を格納するのに必要な最低限の大きさに自動で調整されちゃうみたいだけど。
http://msdn.microsoft.com/en-us/library/system.windows.forms.control.autosize.aspx

QイベントにAddHandlerされているか判断

現在VB2010にてコントロールを作成しているのですが、
外部公開しているイベントに
(コントロール利用側プログラムで)AddHandlerが
行われているかどうか判断する必要がでてしまいました。
どのようにすれば実装可能でしょうか?
よろしくお願いします。

Aベストアンサー

> Custom Eventを用いた場合、DLL呼び元側で用意するなどの処置が
> 必要になると思いますが、
> そうでは無く、コントロール側だけの実装で対応したいのですが無理でしょうか?

イベントハンドラを登録する側のコードに変化はありません。
イベントに対してAddHandlerする場合,
対象イベントがCustom Eventであろうがなかろうが同一コードになります。
# というか,おそらくMSILレベルで同一。


そして,イベントにハンドラが登録されているかどうかを調べる方法は,
イベントを実装する側で登録の有無を記録することが唯一の方法になります。
# No.2さんのリフレクションによる方法は,内部実装の変化に追従できない。

イベントへの登録の有無が必要になるのは
a. イベントを持つクラス
b. イベントハンドラを登録するクラス
c. 上記以外のクラス
のどれでしょうか。

aであればCustom Eventにして事が足ります。
 修正するのはイベントを持つクラスになります。
bであればAddHandlerのタイミングでフラグを立てれば事が足ります。
 修正するのはイベントハンドラを登録するクラスになります。
cであればCustom Eventにしてさらにプロパティで外部に登録されているかを公開することになります。
 修正するのはイベントを持つクラスとそのクラスを使うクラスになります。

ただし,最初に構成を見直すことをやはりお薦めします。
ハンドラの有無の確認は,C#でイベントを書いている場合くらいしか必要になるとは思えないので。
# C#ではRaiseEvent相当がないので,if (Event != null) Event(this, e);みたいに書かざるをえない。

> Custom Eventを用いた場合、DLL呼び元側で用意するなどの処置が
> 必要になると思いますが、
> そうでは無く、コントロール側だけの実装で対応したいのですが無理でしょうか?

イベントハンドラを登録する側のコードに変化はありません。
イベントに対してAddHandlerする場合,
対象イベントがCustom Eventであろうがなかろうが同一コードになります。
# というか,おそらくMSILレベルで同一。


そして,イベントにハンドラが登録されているかどうかを調べる方法は,
イベントを実装する側で登録の有無を記録...続きを読む

Q文字数に合わせて、コントロールの幅を設定する方法

こんにちわ

例えば、TextBox に FontSize = 9 で "ABC" の文字列が入っているとします。
この時 TextBox の幅をこの "ABC" の幅に自動的に調整しようと考えています。

良い方法ご存知の方いらっしゃいましたらよろしくお願い致します。

Aベストアンサー

こんな感じ

Private Sub Command1_Click()

Text1.Width = Me.TextWidth(Text1.Text & " ")
Text1.SelStart = 0
End Sub


Private Sub Command2_Click()

Label1.AutoSize = True
Label1.Caption = Text1.Text & " "
Text1.Width = Label1.Width
Text1.SelStart = 0
End Sub

QMS UI Gothicというフォントはどんなフォント

MS UI Gothicというフォントはどんなフォントで、UIというのは何の略でしょうか。
ホームページのベースのフォントに使えるでしょうか。

Aベストアンサー

User Interfaceの略です。GUIのUI。
実際のところ、JIS規格に置ける半角カタカナの廃止をにらんで作られたフォントの様です。(WindowsのGUIのメッセージも途中のバージョンからから半角カタカナから全角カタカナに切り替わっているはずです)
そのため半角のカナを全角に置き換えてもの区別があまり付かないと言うか違和感無い様になっています。
それ以外はMS Pゴシックとあまり変わりません。

Windows98以降で使われているはず。

QHideについて(.NET)

Form1をHideで非表示にし、Form2を開いた後、再びForm1を表示したいのですがうまくいきません。

[form1のイベント]
Dim frmForm2 as New Form2
frmForm2.Show
Me.hide
Sub End

[form2のイベント]
Dim frmForm1 as New Form1
frmForm1.Show
Me.Close
Sub End

としてあります。
非表示されたフォームを再表示されずに、新しくフォームが開いてしまっていると考えられるんですが、どうしたらよいでしょうか? 

Aベストアンサー

form2で行っている,
Dim frmForm1 as New Form1
の行の意味は
frmForm1と言う、「新しい」Form1クラスのインスタンスを発行する、と言う意味です。

だから新しいFormが開いてしまうのです。

一番簡単に基のFormを再表示したいのであれば

[Form1]
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim fm2 As New Form2
fm2.PreForm = Me

Me.Hide()
fm2.Show()
End Sub
[Form2]
Public PreForm As Form

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
PreForm.Show()
Me.Close()
End Sub

ですかねえ。
他だとShowDialog()の使用も候補になるかと。

form2で行っている,
Dim frmForm1 as New Form1
の行の意味は
frmForm1と言う、「新しい」Form1クラスのインスタンスを発行する、と言う意味です。

だから新しいFormが開いてしまうのです。

一番簡単に基のFormを再表示したいのであれば

[Form1]
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim fm2 As New Form2
fm2.PreForm = Me

Me.Hide()
fm2.Show()
End Sub
[Form2]
...続きを読む

Q一つのトランザクションでSELECTとUPDATEできますか? (ADO.NET)

いつもお世話になっております。

ADO.NETの話なのですが、トランザクションを開始したコネクションオブジェクトで
DataAdapterを使ったSELECTと、ExecuteNonQueryを使ったUPDATEを交互に繰り返し
行うことはできるでしょうか?

現状できていないので可能なのであれば共通関数の見直しが必要かと思っています。
いまはSELECTとUPDATEを別のコネクションで行っているのですが、UPDATE後に
同じテーブルの該当レコードをSELECTにいくため、デッドロックが発生しています。

Aベストアンサー

>それにしてもコネクションとトランザクションオブジェクトを別々に
>渡してやる必要性がよく理解できません。コネクションオブジェクトから
>トランザクションオブジェクトも参照できるのでは?と思うのですが・・・。

たしかに私も腑に落ちない・・・気がします
なにか別に設定が必要な理由があるのかも知れませんね
複数のトランザクションが存在する場合に指定が必要になるのかも!

私の過去のコードにはしっかり
sqlCommand.Transaction = tran
がありました(いつの間にか記述してたみたい)
すいません。#2ではまったくその事に触れていませんでした

憶測での回答になってしまいますが
トランザクションが割り当てられたコマンドが実行されたときに
自動的にBegin Tranされ
トランザクションが割り当てられていないコマンドが実行されたときに
自動的にCommit Tranが実行されてしまうのかも知れません
時間があったら実証して見たいと思います

Qカスタムコントロール作ってます(VB.NET)。VB.Net にVB.6のActiveX作成時にあったプロパティページ作成ができないようですが

タイトルどうりです。VBNETのカスタムコントロールでデザインモードにおけるフォームつまりプロパティページやビジュアルにプロパティボックスから設定できるようにしたいのですが、どうしたらできるでしょうか?VB6ではできたのですが、(Activexコントロール)。

よろしくお願いします。

Aベストアンサー

通常のプロパティと同じように、プロパティ ウィンドウに項目を表示して設定できるようにする必要があります。
具体的には、
1. カスタム コントロールのクラスに外部公開する Property プロシージャを作成して、内部で値を保存できるようにする。
2. そのプロパティの宣言部分で、プロパティ ウィンドウに表示するように指示する属性値を設定する。

こんな感じです。

参考URL:http://www.atmarkit.co.jp/fdotnet/winexp/winexp02/winexp02_01.html

QForm間の値の渡し方

1つのForm上のコマンドボタンで別のFormを表示、そこで変数に値を入れ、そのFormを閉じ、元のFormでその変数を使いたいのですが、どうもうまくいきません。
実施したやり方は、一方のFormの宣言領域で、”Public abc As String”を宣言、両方のFormの(変数に値を入れた方と変数を使う方の)プロシージャーの宣言では引数として(abc As String)と記述しました。
因みに、両プロシージャーともイベントプロシージャーです。何か基本的なことができていないのだとは思いますが、どなたか教えていただけませんか?よろしくお願いします。

Aベストアンサー

すでに何件か回答があがっていますので、少し変わった方法をご参考までに。

あまり使われませんが、Formにはtagというプロパティがあります。
これは「文字列形式であれば何でも格納できる」という、上手く使えば便利なプロパティです。

FormAからFormBを呼び出し、FormBで変更した値をFormA.tagにセットします。
ここでFormBをUnloadしてもFormA.tagの値は影響を受けないので自由に使えます。

複数の値を呼び出し元に戻してやる場合に、区切り文字(カンマなど)で連結した文字列をtagに格納し、呼び出し元で区切り文字でsplitして、複数の値を受け渡すという手法をよく使っています。


人気Q&Aランキング