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 | 33 | 34 | 35 | 36 >>
■70087  複数の画像を一枚にプレビュー
□投稿者/ ポテポテ -(2014/02/24(Mon) 16:42:55)

    分類:[VB.NET/VB2005 以降] 

    お世話になってます。
    Windows7でVB2008を使ってプログラミングしてます。

    質問内容は複数の画像ファイル(jpg)のパスを取得し
    一枚の用紙にプレビューしたいと思ってます。

    'Button1のClickイベントハンドラ
    Private Sub Button1_Click(ByVal sender As System.Object, _
    ByVal e As System.EventArgs) Handles Button1.Click
    'PrintDocumentオブジェクトの作成
    Dim pd As New System.Drawing.Printing.PrintDocument
    'PrintPageイベントハンドラの追加
    AddHandler pd.PrintPage, AddressOf pd_PrintPage
    'プレビューするPrintDocumentを設定
    PrintPreviewControl1.Document = pd
    '画面を更新する(.NET Framework 1.1以前では必要なし)
    PrintPreviewControl1.InvalidatePreview()
    End Sub

    Private Sub pd_PrintPage(ByVal sender As Object, _
    ByVal e As System.Drawing.Printing.PrintPageEventArgs)
    '画像を読み込む
    Dim img As Image = Image.FromFile("test.jpg")
    '画像を描画する
    e.Graphics.DrawImage(img, 0, 0, img.Width, img.Height)
    '次のページがないことを通知する
    e.HasMorePages = False
    '後始末をする
    img.Dispose()
    End Sub

    にて一枚のプレビューはできるのですが
    複数の画像パス取得と複数の画像をプレビューがうまくできません。
    画像も複数ページになったときの処置もよくわかっていないのですが
    なにかアドバイスいただけたらと思います。
親記事 /過去ログ119より / 関連記事表示
削除チェック/

■70088  Re[1]: 複数の画像を一枚にプレビュー
□投稿者/ shu -(2014/02/24(Mon) 17:27:35)
    No70087 (ポテポテ さん) に返信

    1ページ1枚ならこんな感じでどうでしょう。

    (1) imglist as List(Of Image)をPrivateで用意
    (2) pdのBeginPrintイベントでimglistに該当ファイルをすべてAdd
    (3) 同イベントでimglistのcountをPrivate変数imgcnt As Integerに取得
    (4) 同イベントでPrivate変数idx As Integerを0に初期化
    (5) PrintPageイベントではimglist(idx)のイメージを処理、処理後idx += 1を行う。
    (6) 同イベントの最後でidx<imgcntならe.HasMorePagesをTrueにしてそうでなければFalseにする。

    2枚以上なら座標用変数をPrintPageイベント内で定義して描画毎に位置をずらしていくとよいです。
記事No.70087 のレス /過去ログ119より / 関連記事表示
削除チェック/

■70091  Re[1]: 複数の画像を一枚にプレビュー
□投稿者/ an -(2014/02/24(Mon) 18:06:48)
    No70087 (ポテポテ さん) に返信
    
    
    > 'Button1のClickイベントハンドラ
    > 中略 
    > にて一枚のプレビューはできるのですが
    
    このソースコードはご自身で書かれたのでしょうか?
    ご自身で書かれていればある程度他の応用は効きそうですが、
    応用できないという事はどこかのサイト等から拝借したのでしょうか?
    もしそうであれば、引用元を記載するのがマナーだと思います。
    
    というか DOBON.NET さんのを丸写しのままですね・・・。
    
    
    
    > 複数の画像パス取得と複数の画像をプレビューがうまくできません。
    > 画像も複数ページになったときの処置もよくわかっていないのですが
    > なにかアドバイスいただけたらと思います。
    
    「うまくできません」とはどう「うまくできない」のでしょうか?
    ・コンパイルが通らない
     →どのようなエラー?
    ・実行したらエラーになる
     →どのようなエラー?
    ・エラーにはならないが思い通りにならない。
     →どう思っている?どうなってしまった?
    こちらは曖昧な表現では理解できませんので・・・
    
    アドバイスとしては、
    まずはいきなり複数の事を行おうとせずに、
    処理が単純になるように分割して考えることだと思います。
    
    (1)複数の画像(ファイル)パス取得
    (2)取得は別にして、複数の画像ファイルを提示したプログラムに設定してプレビューさせる。(出力位置に注意)
    (3)etc・・・
    
    また、まずは取得したサンプルコードをいじり倒してみるのも良いと思います。
    数値なり値を変えるとどうなるのかとか試してみたり、
    メソッドのヘルプを見てみたり。
    
    
    とりあえず(1)は調べればすぐわかると思いますし、
    (2)は分からないと言っていますので、(2)のサンプルを以下に記載します。
    
        Private Sub pd_PrintPage(ByVal sender As Object, _
                ByVal e As System.Drawing.Printing.PrintPageEventArgs)
            '画像を読み込む 
            Dim img1 As Image = Image.FromFile("test.jpg")
            Dim img2 As Image = Image.FromFile("test2.jpg")
            '画像を描画する 
            e.Graphics.DrawImage(img1, 0, 0, img1.Width, img1.Height)
            e.Graphics.DrawImage(img2, img1.Width, img1.Height, img2.Width, img2.Height)
            '次のページがないことを通知する 
            e.HasMorePages = False
            '後始末をする 
            img1.Dispose()
            img2.Dispose()
        End Sub
    
    これを実行すると元の画像の右下にもう一つ画像が表示されます。
    (test2.jpgは準備してください。)
    
    
    上記踏まえてもう少し詳しく質問してください。
    
記事No.70087 のレス /過去ログ119より / 関連記事表示
削除チェック/

■70085  C#でXMLのDTDに追記
□投稿者/ OROCHI -(2014/02/24(Mon) 15:55:08)

    分類:[C#] 

    こんにちは、現在C#を使ってXMLのDTDに追記するようなプログラムを書こうとしています

    <AB>
    (略)
    </AB>
      ↓
    <AB CD="06"> <!--ここにあるみたいに、CD="06"をABのあとに追加したい-->
    (略)
    </AB>

    途中までは考えたのですが、肝心要のDTDに値を追記する方法がわかりません
    また、途中までは以下の方法で行けるかと思ったのですが「要素ABを取得する方法」、「要素CD="06"を追加する方法」で詰まっている状態です
    System.Xml.XmlDocument ab = new System.Xml.XmlDocument();
    ab.Load((対象のxmlファイルのパス));
    // 要素ABを取得?
      ??
    // 要素ABにCD="06"を追加
      ??
    という流れです。上記2点についてわかる方、いらっしゃいますでしょうか?
親記事 /過去ログ119より / 関連記事表示
削除チェック/

■70086  Re[1]: C#でXMLのDTDに追記
□投稿者/ Hongliang -(2014/02/24(Mon) 16:13:34)
    2014/02/24(Mon) 16:50:42 編集(投稿者)

    肝心のXMLにDTDが一切出てきていないようですが…DTDというものを勘違いされていませんかね?

    とりあえず、AB要素にCD属性を属性値06で追加する、という要件であるとして。
    XmlDocumentから要素の検索する方法は主に3通りです。

    1. ツリーを順番にたどっていく
     XmlDocument::DocumentElementから、順番にChildNodesを調べては目的のツリーの要素であることを確認して、次にその要素のChildNodesを調べて…とやっていきます。正直面倒です。

    2. XmlElement::GetElementsByTagNameを使う
     要素名が一致する要素の一覧を取得できます。目的の要素がXML内で単一であるなら一番楽かもしれません。

    3. SelectNodes/SelectSingleNodeでXPathを使って検索
     XMLの検索に一番よく使われる方法です。ただしXPathというまた独特の構文を持つ言語を学習する必要があります。利用範囲は広いので知っていても損はしないと思いますが。

    属性追加については、目的の要素を指すXmlElementオブジェクトさえ手に入れられれば、SetAttributeメソッドを呼び出すだけです。
記事No.70085 のレス /過去ログ119より / 関連記事表示
削除チェック/

■70094  Re[2]: C#でXMLのDTDに追記
□投稿者/ OROCHI -(2014/02/24(Mon) 18:33:01)
    No70086 (Hongliang さん) に返信
    > 2014/02/24(Mon) 16:50:42 編集(投稿者)
    >
    ありがとうございました。とりあえず一番使いやすそうな2で行こうと思います。DTDはまだXMLの学習が不完全なので勘違いしただけです。失礼しました

    > 属性追加については、目的の要素を指すXmlElementオブジェクトさえ手に入れられれば、SetAttributeメソッドを呼び出すだけです。
    ここが謎なのですが、XmlElementオブジェクトは以下のソースで得られます

    System.Xml.XmlDocument ab = new System.Xml.XmlDocument();
    ab.Load((対象のxmlファイルのパス));
    // ルート要素を取得する
    System.Xml.XmlElement element = ab.DocumentElement;

    ここまではいいのですが、書き込み対象の要素の選択は以下のソースで良いでしょうか?
    また、ここからどうやってABにSetAttributeを使って書き込めば良いのでしょうか?
    SetAttributeはXmlelementのメンバーのため、XmlNodeListの値を内包させることができなさそうなのですが・・・
    よろしければご回答お願いします

    // 書き込み対象の要素を取得する
    System.Xml.XmlNodeList list = element.GetElementByTagName("AB");

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

■70097  Re[3]: C#でXMLのDTDに追記
□投稿者/ Hongliang -(2014/02/24(Mon) 19:06:13)
    2014/02/24(Mon) 19:08:10 編集(投稿者)

    > ここまではいいのですが、書き込み対象の要素の選択は以下のソースで良いでしょうか?
    > また、ここからどうやってABにSetAttributeを使って書き込めば良いのでしょうか?
    > SetAttributeはXmlelementのメンバーのため、XmlNodeListの値を内包させることができなさそうなのですが・・・
    > よろしければご回答お願いします
    >
    > // 書き込み対象の要素を取得する
    > System.Xml.XmlNodeList list = element.GetElementByTagName("AB");

    GetElement"s"ByTagNameです。
    ABと言う名前の要素は一つのXML内に複数存在する可能性がありますから、返値も当然Listです。
    XML中に必ずAB要素が一つ存在し、かつ二つ以上は存在しないと断言できるなら、直接list[0]でアクセスしても良いでしょう。
    そうでないなら、リスト内の要素を順番に調べて、目的の要素を探し出す必要があります。
    XmlNodeListは文字通りXmlNodeのリストなので、各要素をXmlElementとして扱うにはXmlElementにキャストする必要があります。

    // 「要素」がXMLの要素とコレクションの要素でややこしいな。


    // と書いていたらすでにご自分で解決されていたので、解決済みを追加。
記事No.70085 のレス / END /過去ログ119より / 関連記事表示
削除チェック/

■70096  Re[3]: C#でXMLのDTDに追記
□投稿者/ OROCHI -(2014/02/24(Mon) 18:57:50)
    自力でなんとかいけました(キャストできることに気づきませんでした)

    System.Xml.XmlDocument ab = new System.Xml.XmlDocument();
    ab.Load((対象のxmlファイルのパス));
    // ルート要素を取得する
    System.Xml.XmlElement element = ab.DocumentElement;

    // 書き込み対象の要素を取得する
    System.Xml.XmlNodeList list = element.GetElementByTagName("AB");
    System.Xml.XmlElement controlTarget=(System.Xml.XmlElement)list.Item(0);

    // 要素内に追記したい内容を記述する
    controltarget.SetAttribute("CD","06");
    ab.save((対象のxmlファイルのパス));

    ありがとうございました
記事No.70085 のレス / END /過去ログ119より / 関連記事表示
削除チェック/

■70070  検索キーワードの取得方法
□投稿者/ mink -(2014/02/23(Sun) 08:25:27)

    分類:[ASP.NET (VB)] 

    2014/02/23(Sun) 08:26:13 編集(投稿者)

    こんにちは。
    こちらには行き詰まった時にたまにお世話になっています。
    asp.net2.0でYahooやGoogleから遷移してきた時の検索キーワードを取得したいです。
    リファラーの取り方はすぐに見つかったのですが、検索キーワードの取得方法がなかなか見つかりません。
    お知りの方いらっしゃったらぜひアドバイスの程お願いします!
親記事 /過去ログ119より / 関連記事表示
削除チェック/

■70071  Re[1]: 検索キーワードの取得方法
□投稿者/ Azulean -(2014/02/23(Sun) 09:34:02)
    No70070 (mink さん) に返信
    > asp.net2.0でYahooやGoogleから遷移してきた時の検索キーワードを取得したいです。
    > リファラーの取り方はすぐに見つかったのですが、検索キーワードの取得方法がなかなか見つかりません。

    Referer を分解して、q に対応する文字列を取り出すとかでしょうか。
    とりあえず、Referer の ? 以降を HttpUtility.ParserQueryString に渡して、どんなキーと値が手に入るか、試してみてはどうでしょうか。
    http://msdn.microsoft.com/ja-jp/library/system.web.httputility.parsequerystring
記事No.70070 のレス /過去ログ119より / 関連記事表示
削除チェック/

■70099  Re[2]: 検索キーワードの取得方法
□投稿者/ mink -(2014/02/24(Mon) 19:27:50)
    Azulean様

    ご教示ありがとうございます。
    早速です試してみました。
    Googleだけはどうしても取得できないのですが間に1ページはさんでリンクしているようでQueryStringがそもそも取得できないのでこれはどうしようもできないみたいですね。
    でも、YAHOO!やBingの方はうまく取得できるようにプログラムできました。
    感謝感激です!
    ありがとうございました♪




    No70071 (Azulean さん) に返信
    > ■No70070 (mink さん) に返信
    >>asp.net2.0でYahooやGoogleから遷移してきた時の検索キーワードを取得したいです。
    >>リファラーの取り方はすぐに見つかったのですが、検索キーワードの取得方法がなかなか見つかりません。
    >
    > Referer を分解して、q に対応する文字列を取り出すとかでしょうか。
    > とりあえず、Referer の ? 以降を HttpUtility.ParserQueryString に渡して、どんなキーと値が手に入るか、試してみてはどうでしょうか。
    > http://msdn.microsoft.com/ja-jp/library/system.web.httputility.parsequerystring
記事No.70070 のレス / END /過去ログ119より / 関連記事表示
削除チェック/

■70073  コールバックメソッドの同期
□投稿者/ C#研究者 -(2014/02/23(Sun) 10:44:05)

    分類:[C#] 

    実行環境 Windows7 32bit
    開発環境 Windows7 32bit VisualStudio C#2010

    非同期のメソッドからコールバックした時にエラーが発生します。
    private ReturnHandler(Object sender, EventArgs e)
    {
    listBox1.Items.add("test"); //エラー発生
    }

    なのでこのような記述をしているのですが

    listBox1.Invoke((Action)(() =>
    {
    listBox1.Items.Add("test");
    }));

    この記述だとコントロールに依存してしまいます。
    他のコントロールも Invokeの中のActionで使いたいのですが他によい記述はないでしょうか。

親記事 /過去ログ119より / 関連記事表示
削除チェック/

■70074  Re[1]: コールバックメソッドの同期
□投稿者/ Azulean -(2014/02/23(Sun) 11:01:25)
    考えられるとしたらこの辺でしょうか。

    ・特にこだわらず、Form に対して Invoke する形にする。(特定のコントロールにで違和感があるのであれば、それらが張り付いているフォームに対する処理とする)
     例に挙がっているコードであれば、Invoke(...) と書けば Form に対する Invoke なので ListBox といった個別のコントロールに依存する状況からは変わります。

    ・メインスレッドの SynchronizationContext をあらかじめ取得しておき、それに対して Send または Post する。
    http://msdn.microsoft.com/ja-jp/library/system.threading.synchronizationcontext

    ・ISynchronizeInvoke インターフェースを実装したオブジェクトをもらうクラスを設計する。
    http://msdn.microsoft.com/ja-jp/library/system.componentmodel.isynchronizeinvoke
記事No.70073 のレス /過去ログ119より / 関連記事表示
削除チェック/

■70079  Re[2]: コールバックメソッドの同期
□投稿者/ C#研究者 -(2014/02/23(Sun) 16:27:25)
    なるほど、いろいろありますね。
    ありがとうございます。
記事No.70073 のレス / END /過去ログ119より / 関連記事表示
削除チェック/

■70102  Re[1]: コールバックメソッドの同期
□投稿者/ Jitta -(2014/02/24(Mon) 20:47:22)
    2014/02/24(Mon) 20:47:46 編集(投稿者)

    No70073 (C#研究者 さん) に返信
    > この記述だとコントロールに依存してしまいます。

     う〜ん?

    > private ReturnHandler(Object sender, EventArgs e)
    > {
    > listBox1.Items.add("test"); //エラー発生
    ^^^^^^^^
    > }

    中のコードがインスタンスに依存しているように思いますが?
    特定のインスタンスに依存しているコードに、
    特定のインスタンスに依存するコードを追加するのに、
    何をためらうことがあるのでしょうか?


    > 他のコントロールも Invokeの中のActionで使いたい

     それとも、こういうこと?

    listBox1.Invoke((Action)(() =>
    {
    listBox1.Items.Add("test");
    listBox2.Items.Add("TEST"); ←
    }));



    > 非同期のメソッドからコールバックした時にエラーが発生します。

     細かいことですが、「コールバックされた」ですよね。
    非同期のメソッドを「呼び出す」と、非同期メソッドから「呼び戻される」。
記事No.70073 のレス / END /過去ログ119より / 関連記事表示
削除チェック/

■70064  UDPを使用して3台での通信について
□投稿者/ にこにこ -(2014/02/22(Sat) 19:38:56)

    分類:[VB.NET/VB2005 以降] 

    (開発環境)
    ・VB2010
    ・OS:Windows7

    UDPをして3台のPCと通信を行いたいのですがどのようにすればわかりません。

    PC-1:IPaddress 192.168.1.100(Port番号:6000)
    PC-2:IPaddress 192.168.1.101(Port番号:6000)
    PC-3:IPaddress 192.168.1.102(Port番号:6000)

    PC-1でプログラムを作成し、PC-2とPC-3とUDP通信したいのですが、下記*1を
    するとデバック開始時に「エラーInvalidOperationExceptionはハンドルされませんでした。」
    と表示されます。
    PC2台では、*1を削除すればPC-1とPC-2で問題なく通信できます。
    Port番号を変える方法もあるかもしれませんが、Port番号は同じにしたいです。
    何か方法はあるでしょうか?

    ' ソケット生成
    Private objSck As New System.Net.Sockets.UdpClient(60000)
    Private objSck2 As New System.Net.Sockets.UdpClient(60000) '*1これ追加


    Private Sub Form1_Load( _
    ByVal sender As System.Object, ByVal e As System.EventArgs) _
    Handles MyBase.Load
    ' ソケット接続
    objSck.Connect("192.168.1.100", 60000)
    End Sub

    Private Sub Form1_FormClosed( _
    ByVal sender As System.Object, ByVal e As System.Windows.Forms.FormClosedEventArgs) _
    Handles MyBase.FormClosed
    ' ソケットクローズ
    objSck.Close()
    End Sub

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    ' ソケット送信
    Dim dat As Byte() = _
    System.Text.Encoding.GetEncoding("SHIFT-JIS").GetBytes("abc123")
    objSck.Send(dat, dat.GetLength(0))

    End Sub
    End Class
親記事 /過去ログ119より / 関連記事表示
削除チェック/

■70068  Re[1]: UDPを使用して3台での通信について
□投稿者/ 甕星 -(2014/02/23(Sun) 04:41:37)
    No70064 (にこにこ さん) に返信
    > objSck.Connect("192.168.1.100", 60000)

    ここで相手先IPアドレスをしていすのでは無く・・・

    > Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    > ' ソケット送信
    > Dim dat As Byte() = _
    > System.Text.Encoding.GetEncoding("SHIFT-JIS").GetBytes("abc123")
    > objSck.Send(dat, dat.GetLength(0))
    >
    > End Sub

    送信するときにSendtoメソッドを使って、相手先IPアドレスを指定します。

    またUDPの場合は、通信相手が2台以上でも同じソケットを使用します。
    *1の部分は不要です。
記事No.70064 のレス /過去ログ119より / 関連記事表示
削除チェック/

■70109  Re[2]: UDPを使用して3台での通信について
□投稿者/ にこにこ -(2014/02/25(Tue) 00:30:29)
    甕星 さん

    解決しました。
    ありがとございました。


    No70068 (甕星 さん) に返信
    > ■No70064 (にこにこ さん) に返信
    >> objSck.Connect("192.168.1.100", 60000)
    >
    > ここで相手先IPアドレスをしていすのでは無く・・・
    >
    >> Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    >> ' ソケット送信
    >> Dim dat As Byte() = _
    >> System.Text.Encoding.GetEncoding("SHIFT-JIS").GetBytes("abc123")
    >> objSck.Send(dat, dat.GetLength(0))
    >>
    >> End Sub
    >
    > 送信するときにSendtoメソッドを使って、相手先IPアドレスを指定します。
    >
    > またUDPの場合は、通信相手が2台以上でも同じソケットを使用します。
    > *1の部分は不要です。
記事No.70064 のレス / END /過去ログ119より / 関連記事表示
削除チェック/

■70093  DataGridviewのカラムヘッダーについて
□投稿者/ VB初心者 -(2014/02/24(Mon) 18:27:17)

    分類:[VB.NET/VB2005 以降] 

    開発[VB.NET]

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

    DataGridViewのカラムヘッダーにソート機能が付いていると思うのですが
    デフォルトでは昇順と降順の見分けがつきにくいものとなっています。

    知りたい事としては
    昇順と降順の見分けがつきやすいようにデザインを変更したり、矢印を強調する事ができますでしょうか?

    どなたかご教授ください。

    よろしくお願い致します。
親記事 /過去ログ119より / 関連記事表示
削除チェック/

■70095  Re[1]: DataGridviewのカラムヘッダーについて
□投稿者/ 魔界の仮面弁士 -(2014/02/24(Mon) 18:44:36)
    No70093 (VB初心者 さん) に返信
    > 昇順と降順の見分けがつきやすいようにデザインを変更したり、矢印を強調する事ができますでしょうか?

    自前で「オーナー描画」することによって対応できます。
    http://dobon.net/vb/dotnet/datagridview/index.html
記事No.70093 のレス /過去ログ119より / 関連記事表示
削除チェック/

<前の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 | 33 | 34 | 35 | 36 >>

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

パスワード/

- Child Tree -