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

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

ログ内検索
  • キーワードを複数指定する場合は 半角スペース で区切ってください。
  • 検索条件は、(AND)=[A かつ B] (OR)=[A または B] となっています。
  • [返信]をクリックすると返信ページへ移動します。
キーワード/ 検索条件 /
検索範囲/ 強調表示/ ON (自動リンクOFF)
結果表示件数/ 記事No検索/ ON
大文字と小文字を区別する

全過去ログを検索

<< 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 >>
■1865  Re[1]: vbscript
□投稿者/ ぼのぼの -(2007/03/07(Wed) 18:38:35)
    No1853 (pri さん) に返信

    ローカルでちょこっと試してみてたんですが…

    > ボタンイベントがあるときは、値が取れず
    > ボタンイベントがないときは、値が取れる
    >
    > というような感じになってしまっています。
    >
    > なので、ボタンイベントが存在していても
    > 値をとれる方法がわかる人がいたら、教えてください。

    これの意味がわかんなくなったので確認させてください。

    ボタンイベントがあるとき=マウスでボタンを押したとき
    ボタンイベントがないとき=テキストボックスでEnterキーを押したとき

    という意味でしょうか?

    で、「値が取れず」「値が取れる」というのは、
    マウスでボタンを押すとダイアログの「はい」「いいえ」に合わせて
    ラベルの表示が正しく「成功」「…」とならず、
    テキストボックスでEnterキーを押すとダイアログの「はい」「いいえ」に合わせて
    ラベルの表示が正しく「成功」「…」となる、という意味でしょうか?

    だとするとこっちのローカルで起きている現象と逆なんですが(−_−;
記事No.1853 のレス /過去ログ10より / 関連記事表示
削除チェック/

■1868  Re[2]: vbscript
□投稿者/ pri -(2007/03/07(Wed) 19:19:43)
    No1865 (ぼのぼの さん) に返信

    返信ありがとうございます。

    > ローカルでちょこっと試してみてたんですが…

    ありがとうございます。

    > ボタンイベントがあるとき=マウスでボタンを押したとき
    > ボタンイベントがないとき=テキストボックスでEnterキーを押したとき

    これは、ボタンイベント自体(private button1 〜 end sub)をソースから削除し、
    ボタンを押した際にvbscriptだけ起動する状態です。

    その状態の場合は、pageが再度読み込まれないので、値を保持している状態なのだと思います。

    ボタンイベントがあるときは、ボタンイベント時にpageが読み込まれてしまうので保持できないのだと思うのですが、
    その対処法が思いつかず…
記事No.1853 のレス /過去ログ10より / 関連記事表示
削除チェック/

■1874  Re[3]: vbscript
□投稿者/ ぼのぼの -(2007/03/07(Wed) 20:08:08)
    No1868 (pri さん) に返信
    >>ボタンイベントがあるとき=マウスでボタンを押したとき
    >>ボタンイベントがないとき=テキストボックスでEnterキーを押したとき
    > 
    > これは、ボタンイベント自体(private button1 〜 end sub)をソースから削除し、
    > ボタンを押した際にvbscriptだけ起動する状態です。
    > 
    > その状態の場合は、pageが再度読み込まれないので、値を保持している状態なのだと思います。
    > 
    > ボタンイベントがあるときは、ボタンイベント時にpageが読み込まれてしまうので保持できないのだと思うのですが、
    > その対処法が思いつかず…
    
    うーん、おかしいなぁ…(−_−;
    そういう意味だとすると、こちらのローカルではボタンイベントがあるときでも値が取れてます。
    
    ちょっと長くなるので3つに分割して投稿しますね。
    【1/3】
    まずは最初に試したミニマムコード。
    
    <WebForm1.aspx>
    <%@ Page Language="vb" AutoEventWireup="false" Codebehind="WebForm1.aspx.vb" Inherits="WebTest.WebForm1"%>
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
    <HTML>
      <HEAD>
        <title>WebForm1</title>
        <meta name="GENERATOR" content="Microsoft Visual Studio .NET 7.1">
        <meta name="CODE_LANGUAGE" content="Visual Basic .NET 7.1">
        <meta name="vs_defaultClientScript" content="JavaScript">
        <meta name="vs_targetSchema" content="http://schemas.microsoft.com/intellisense/ie5">
        <script language="vbscript">
        <!--
        Sub Button1_OnClick
          If MsgBox("おや ? 不思議 ! !", vbYesNo + vbDefaultButton2, "確認") = vbNo Then
            Form1.TextBox1.value = "No"
          Else
            Form1.TextBox1.value = "Yes"
          End If
        End Sub
        -->
        </script>
      </HEAD>
      <body>
        <form id="Form1" method="post" runat="server">
          <asp:TextBox id="TextBox1" runat="server"></asp:TextBox><br>
          <asp:Button id="Button1" runat="server" Text="Button"></asp:Button><br>
          <asp:Label id="Label1" runat="server">Label</asp:Label>
          <input type="text" name="dummy" style="display:none">
        </form>
      </body>
    </HTML>
    
    <WebForm1.aspx.vb(自動生成部除く)>
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        If TextBox1.Text = "No" Then
            Label1.Text = "…"
        Else
            Label1.Text = "成功"
        End If
    End Sub
    
    このコードで、少なくともマウスでボタンを押したときは期待通りの動作になりました。
    ただし、テキストボックスでEnterキーを押すと、ダイアログが出ずにFormが送信されちゃいました。
    これには2つの対策方法があります。
記事No.1853 のレス /過去ログ10より / 関連記事表示
削除チェック/

■1875  Re[4]: vbscript
□投稿者/ ぼのぼの -(2007/03/07(Wed) 20:16:27)
    【2/3】
    次に1つめの対策方法。
    WebForm1.aspxに1行追加します。
    
      <body>
        <form id="Form1" method="post" runat="server">
          <asp:TextBox id="TextBox1" runat="server"></asp:TextBox><br>
          <asp:Button id="Button1" runat="server" Text="Button"></asp:Button><br>
          <asp:Label id="Label1" runat="server">Label</asp:Label>
          <input type="text" style="display:none"><!--ここを追加-->
        </form>
      </body>
    
    以前別件でたまたま見つけたのですが、IEには「Form内にテキストボックスが一つしかないと
    EnterキーによるSubmitでボタンのClickイベントが発生しない」というバグ(?)があります。
    
    なのでstyleで非表示にしたダミーのテキストボックスを追加して、
    Form内にテキストボックスが2つ以上になる状態をつくりだしてあげます。
    
    #思ったより短い…3分割する必要なかったなorz
記事No.1853 のレス /過去ログ10より / 関連記事表示
削除チェック/

■1876  Re[5]: vbscript
□投稿者/ ぼのぼの -(2007/03/07(Wed) 20:26:47)
    【3/3】
    次に2つめの対策方法。
    Webフォームのボタンを使うと<input type="submit">になってしまうので、
    HTMLのボタンの方を使ったら、<input type="button">として描画されるために
    テキストボックスでEnterを押したときの送信自体が行われなくなる、と考えたのですが…
    
    <WebForm1.aspx>
    <%@ Page Language="vb" AutoEventWireup="false" Codebehind="WebForm1.aspx.vb" Inherits="WebTest.WebForm1"%>
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
    <HTML>
      <HEAD>
        <title>WebForm1</title>
        <meta name="GENERATOR" content="Microsoft Visual Studio .NET 7.1">
        <meta name="CODE_LANGUAGE" content="Visual Basic .NET 7.1">
        <meta name="vs_defaultClientScript" content="JavaScript">
        <meta name="vs_targetSchema" content="http://schemas.microsoft.com/intellisense/ie5">
        <script language="vbscript">
        <!--
        Sub Button1_OnClick
          If MsgBox("おや ? 不思議 ! !", vbYesNo + vbDefaultButton2, "確認") = vbNo Then
            Form1.TextBox1.value = "No"
          Else
            Form1.TextBox1.value = "Yes"
          End If
        End Sub
        -->
        </script>
      </HEAD>
      <body>
        <form id="Form1" method="post" runat="server">
          <asp:TextBox id="TextBox1" runat="server"></asp:TextBox><br>
          <INPUT id="Button1" type="button" value="Button" name="Button1" runat="server"><br>
          <asp:Label id="Label1" runat="server">Label</asp:Label>
          <input type="text" style="display:none">
        </form>
      </body>
    </HTML>
    
    <WebForm1.aspx.vb(自動生成部除く)>
    Private Sub Button1_ServerClick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.ServerClick
        If TextBox1.Text = "No" Then
            Label1.Text = "…"
        Else
            Label1.Text = "成功"
        End If
    End Sub
    
    動かしてみたらダイアログが出る前に<input>タグに自動で埋め込まれた__doPostBackが走ってしまい、
    期待した動作になりませんでした。これじゃ対策方法とは言えませんね。
    すみません。少し先走りました。
記事No.1853 のレス /過去ログ10より / 関連記事表示
削除チェック/

■1877  Re[6]: vbscript
□投稿者/ pri -(2007/03/07(Wed) 21:34:21)
    No1876 (ぼのぼの さん) に返信

    ソースまで書いていただきどうもありがとうございます。

    明日早速書いていただいたソースを参考に
    試していただきます。

    せっかくソースまで書いていただいたのに
    すぐに試せなくて、本当にすみません…

    明日試したら結果書きます。
    ので何かあったらまたよろしくお願いいたします。



記事No.1853 のレス /過去ログ10より / 関連記事表示
削除チェック/

■1888  Re[6]: vbscript
□投稿者/ pri -(2007/03/08(Thu) 11:09:14)
    No1876 (ぼのぼの さん) に返信

    いろいろ試してみたのですが、
    MsgBoxで線タック下ボタンの値が、page再読み込みされることによって
    消されてしまいます。

    ボタンを押したPageには値あり
    押され再読み込みされたPageには値なし

    って感じです。

記事No.1853 のレス /過去ログ10より / 関連記事表示
削除チェック/

■1892  Re[7]: vbscript
□投稿者/ ぼのぼの -(2007/03/08(Thu) 11:27:05)
    No1888 (pri さん) に返信
    > いろいろ試してみたのですが、
    > MsgBoxで線タック下ボタンの値が、page再読み込みされることによって
    > 消されてしまいます。

    原因としては、
    ・選択したボタンの値を保持するコントロールがサーバコントロールになっていない
    ・ViewStateが無効になってゐる
    ・Page_Loadで何か余計なことをしている
    などが考えられますが…

    私が貼ったコードを余計なコードを一切加えずそのまま動かすとどうなりますか?
記事No.1853 のレス /過去ログ10より / 関連記事表示
削除チェック/

■1893  Re[8]: vbscript
□投稿者/ pri -(2007/03/08(Thu) 11:44:22)
    2007/03/08(Thu) 12:06:14 編集(投稿者)

    No1892 (ぼのぼの さん) に返信

    返信ありがとうございます。

    > 原因としては、
    > ・選択したボタンの値を保持するコントロールがサーバコントロールになっていない
    > ・ViewStateが無効になってゐる
    > ・Page_Loadで何か余計なことをしている
    > などが考えられますが…

    ページを再度新しくし、コードを貼り付けたので
    余計なこととかはしていないと思います。

    ViewStateも"True"になっております。

    > 私が貼ったコードを余計なコードを一切加えずそのまま動かすとどうなりますか?

    【3/3】
    をそのまま貼り付けた結果、
    TextBox1.Textの値は"Nothing"でした。
    よって、確認メッセージでどちらを選択しても、
    if文で、Elseの方の処理を行ってしまいます。

    【1/3】
    をそのまま貼り付けた結果、
    TextBox1.Textの値は保持されていました。
    よって望み通りの処理ができました。

    WebControlとHymlControl
    で、なぜ値を保持できる、できないに分かれるのかわかりませんが、
    HtmlControlではこの処理はできないのでしょうか?
記事No.1853 のレス /過去ログ10より / 関連記事表示
削除チェック/

■1895  Re[9]: vbscript
□投稿者/ ぼのぼの -(2007/03/08(Thu) 12:48:53)
    No1893 (pri さん) に返信
    > 【3/3】
    > をそのまま貼り付けた結果、
    > TextBox1.Textの値は"Nothing"でした。
    > よって、確認メッセージでどちらを選択しても、
    > if文で、Elseの方の処理を行ってしまいます。
    
    あー、そっか、VS2003だと貼り付けただけじゃ駄目なんだったorz
    "Web フォーム デザイナで生成されたコード"のRegionを展開すると、
    
    Protected WithEvents Button1 As System.Web.UI.WebControls.Button
    
    の一行があるはず。HTMLコントロールを使う場合は、この部分を
    
    Protected WithEvents Button1 As System.Web.UI.HtmlControls.HtmlInputButton
    
    というふうに変えてやらないと駄目です。
    デザイナで画面をつくると自動的に生成されるんですが…
    
    ただ、どちらにしろ【3/3】は期待通りの動作にならないサンプルなので、
    
    > 【1/3】
    > をそのまま貼り付けた結果、
    > TextBox1.Textの値は保持されていました。
    > よって望み通りの処理ができました。
    
    これができたってことはとりあえずは解決ってことになるでしょうか?
    【2/3】を入れないとEnterキーでの動作がヘンにはなりますけども。
記事No.1853 のレス /過去ログ10より / 関連記事表示
削除チェック/

■1948  Re[10]: vbscript
□投稿者/ pri -(2007/03/09(Fri) 18:40:13)
    2007/03/13(Tue) 10:54:12 編集(投稿者)

    No1895 (ぼのぼの さん) に返信

    返信遅くなりましてすみません…。

    > これができたってことはとりあえずは解決ってことになるでしょうか?
    > 【2/3】を入れないとEnterキーでの動作がヘンにはなりますけども。

    はい。
    おかげさまで解決です。
    ほんとにありがとうございました。
記事No.1853 のレス / END /過去ログ10より / 関連記事表示
削除チェック/

■1826  usingステートメントを途中で抜けたとき
□投稿者/ のぶお -(2007/03/07(Wed) 10:54:51)

    分類:[C# (Windows)] 

    はじめまして。
    プログラミングしていて分からないことがあったので質問させてください。

    usingステートメント内で、returnやbreak, continueなどを使って途中で抜けた場合、
    オブジェクトはちゃんと破棄されるのでしょうか?
    ちなみに.NET Framework2.0でC#を使っています。

    たとえば下の例で、return trueで抜けた場合、StreamReaderはCloseされますか?
    try 〜 finally 〜 と完全に等価であればされると思いますが、
    明確な記述が見つからなかったので質問してみました。
    よろしくお願いします。

    例)1行目に指定された記述があるファイルが存在するかどうか調べるメソッド

    public static bool Exists(string str)
    {
    string[] files = Directory.GetFiles("C:\\test");

    for (int i = 0; i < files.Length; i++)
    {
    using (StreamReader sr = new StreamReader(files[i]))
    {
    if (str == sr.ReadLine())
    return true;
    }
    }

    return false;
    }
親記事 /過去ログ10より / 関連記事表示
削除チェック/

■1827  Re[1]: usingステートメントを途中で抜けたとき
□投稿者/ επιστημη -(2007/03/07(Wed) 11:07:12)
>
    > try 〜 finally 〜 と完全に等価であればされると思いますが、
    > 明確な記述が見つからなかったので質問してみました。
    
    MSDNには:「スコープの外部ではオブジェクトが破棄されます」とあります。
    ってことは如何なる理由であれ、スコープから抜け出せばDisposeされるっしょ。
    
    疑わしいなら
    
    class Foo : IDisposable {
      void Dispose() { Console.WriteLine("あなた、アタシを捨てるのね!?"); }
    }
    
    なんてお試しクラスこさえて確認してはいかがでしょ。
    
記事No.1826 のレス /過去ログ10より / 関連記事表示
削除チェック/

■1831  Re[1]: usingステートメントを途中で抜けたとき
□投稿者/ よねKEN -(2007/03/07(Wed) 11:34:16)
>
    > usingステートメント内で、returnやbreak, continueなどを使って途中で抜けた場合、
    > オブジェクトはちゃんと破棄されるのでしょうか?

    ildasmというツールはご存知でしょうか?
    テストプログラムを作り、ildasmで逆アセンブルしてみるとわかりますが、
    usingはtry〜finallyと等価です。

    ILアセンブラ上ではtry〜finallyは以下のような記述になります。
    .try
    {

    }
    finally
    {

    }
記事No.1826 のレス /過去ログ10より / 関連記事表示
削除チェック/

■1950  Re[2]: usingステートメントを途中で抜けたとき
□投稿者/ のぶお -(2007/03/09(Fri) 20:09:31)
    お試しクラスですか、なるほど。
    作ってみると確認できますね。

    ildasmというのがあるのですね。
    今ちょっと調べてみました。
    今回だけでなく、今後も使えそうです。
    どうもありがとうございました。
記事No.1826 のレス / END /過去ログ10より / 関連記事表示
削除チェック/

■1962  ピクチャの変更について
□投稿者/ 桃 -(2007/03/11(Sun) 09:22:32)

    分類:[C# (Windows)] 

    こんにちはC#初心者の桃です。

    基本的な質問で申し訳ないのですが、

    設定したピクチャボックスの中に

    指定したフォルダに保存されている、イメージ
    画像を出力し、

    且つボタンを押したときにフォルダ内の次の
    画像を読み込むよう設定したいのですが
    どのような方法があるでしょうか?

    どなたか簡単な方法があれば教えてください。
親記事 /過去ログ10より / 関連記事表示
削除チェック/

■1964  Re[1]: ピクチャの変更について
□投稿者/ Kazuki -(2007/03/11(Sun) 10:35:06)
    No1962 (桃 さん) に返信
    > 設定したピクチャボックスの中に
    >
    > 指定したフォルダに保存されている、イメージ
    > 画像を出力し、
    >
    > 且つボタンを押したときにフォルダ内の次の
    > 画像を読み込むよう設定したいのですが
    > どのような方法があるでしょうか?
    >
    > どなたか簡単な方法があれば教えてください。
    どこまで出来てるのでしょう?
記事No.1962 のレス /過去ログ10より / 関連記事表示
削除チェック/

■1965  Re[1]: ピクチャの変更について
□投稿者/ επιστημη -(2007/03/11(Sun) 10:45:35)
>
    「ボタンを押すたびにフォルダ内のイメージファイル名をテキストボックスに表示」
    をこしらえるとこから始めましょう。

    それさえできれば、あとはファイルをイメージとして描くだけ。
記事No.1962 のレス /過去ログ10より / 関連記事表示
削除チェック/

■1966  Re[2]: ピクチャの変更について
□投稿者/ 渋木宏明(ひどり) -(2007/03/11(Sun) 10:57:30)
>
    2007/03/11(Sun) 11:25:48 編集(投稿者)

    > それさえできれば、あとはファイルをイメージとして描くだけ。

    「描く」のは PictureBox にお任せするのが正道です。

    直接描画するなら PictureBox を選択する意味ナシな上、知識の無い人がやると大抵無駄にチラつくし。

    特別な理由がないなら

    Bitmap bitmap = (Bitmap)Image.FromFile(ファイル名);
    pictureBox.Image = bitmap;

    のように、「Image.FromFile() でビットマップファイルを読み込んで Bitmap クラスインスタンスを作成して、PictureBox.Image プロパティに設定する」します。

    ちなみに、.NET 1.x の Image.FromFile() は「ビットマップファイルを読み込むと、Bitmap クラスのインスタンスを解放するまでファイルをロックしてしまう」という欠点(欠陥?)があるので要注意です。

    # あれ? .NET 2.0/3.0 でも治ってないんだっけ?
記事No.1962 のレス /過去ログ10より / 関連記事表示
削除チェック/

■1967  Re[3]: ピクチャの変更について
□投稿者/ Hongliang -(2007/03/11(Sun) 15:13:20)
>
    > のように、「Image.FromFile() でビットマップファイルを読み込んで Bitmap クラスインスタンスを作成して、PictureBox.Image プロパティに設定する」します。

    .NET 2.0 だと PictureBox は更に進んで、直接画像を Load することができるようになっています。
    // ImageLocation に URL のリストをバインドすればそれだけでスライドショーが……。

    > ちなみに、.NET 1.x の Image.FromFile() は「ビットマップファイルを読み込むと、Bitmap クラスのインスタンスを解放するまでファイルをロックしてしまう」という欠点(欠陥?)があるので要注意です。

    インスタンスを解放というと微妙にタイミングが遅れそうなので、リソースを解放する(Dispose を呼ぶか、そうでなければインスタンスが削除される)とき、と言った方がいいなぁ。
記事No.1962 のレス /過去ログ10より / 関連記事表示
削除チェック/

<前の20件 | 次の20件>

<< 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 >>

ヒット件数が多いので過去ログ1〜10 までの検索結果 / 過去ログ11からさらに検索→

パスワード/

- Child Tree -