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

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

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

全過去ログを検索

<< 0 >>
■6203  デザイナの読み込み時のエラー
□投稿者/ non -(2007/08/04(Sat) 14:55:51)

    分類:[C#] 

    ToolStripControlHostを派生した以下のクラスを作成しました。

    namespace test
    {
    class TestStrip : ToolStripControlHost
    {
    public TestStrip()
    : base(new ComboBox())
    {
    }
    }
    }

    これをデザイナーで読み込むと以下のエラーが表示されます。
    このエラーを表示させないようにするにはどのようにすれば良いでしょうか?
    (何でToolStripControlHostのコンストラクタを見つけようとしてるのだろう・・・)

    型 'System.Windows.Forms.ToolStripControlHost' にコンストラクタが見つかりませんでした。
    場所 System.RuntimeType.CreateInstanceImpl(BindingFlags bindingAttr, Binder binder, Object[] args, CultureInfo culture, Object[] activationAttributes)
    場所 System.Activator.CreateInstance(Type type, BindingFlags bindingAttr, Binder binder, Object[] args, CultureInfo culture, Object[] activationAttributes)
    場所 System.ComponentModel.Design.DesignSurface.CreateInstance(Type type)
    場所 Microsoft.VisualStudio.Design.VSDesignSurface.CreateInstance(Type type)
    場所 System.ComponentModel.Design.DesignerHost.System.ComponentModel.Design.IDesignerHost.CreateComponent(Type componentType, String name)
    場所 System.ComponentModel.Design.Serialization.DesignerSerializationManager.CreateInstance(Type type, ICollection arguments, String name, BooleanaddToContainer)
    場所System.ComponentModel.Design.Serialization.DesignerSerializationManager.System.ComponentModel.Design.Serialization.IDesignerSerializationManager.CreateInstance(Type type, ICollection arguments, String name, Boolean addToContainer)
    場所 System.ComponentModel.Design.Serialization.TypeCodeDomSerializer.Deserialize(IDesignerSerializationManager manager, CodeTypeDeclarationdeclaration)
    場所 System.ComponentModel.Design.Serialization.CodeDomDesignerLoader.PerformLoad(IDesignerSerializationManager manager)
    場所 Microsoft.VisualStudio.Design.Serialization.CodeDom.VSCodeDomDesignerLoader.PerformLoad(IDesignerSerializationManager serializationManager)
    場所 System.ComponentModel.Design.Serialization.BasicDesignerLoader.BeginLoad(IDesignerLoaderHost host)

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

■18620  Re[3]: マイコン(PIC)とのシリアル通信
□投稿者/ れい -(2008/05/15(Thu) 10:03:55)
    No18605 (組込系の人 さん) に返信
    > こんな感じでどうでしょうか?

    serialPort1のクラスが不明なので正確なところはわかりませんが、
    たぶんダメですね。

    StreamのRead/Writeの実装にはいくつかの流儀があります。
    昔はいろいろありましたが、
    最近は以下の振る舞いが一般的です。

    ・Readが戻るのは
    「バッファがいっぱいになる」
    「エラーが発生する」
    「ストリームが終わっている(戻り値=0)」
    「1バイト以上読み取る(戻り値=読み取ったバイト数)」

    ・Writeが戻るのは
    「バッファを全て書き終わる」
    「エラーが発生する」

    です。
    .Netでもこれが採用されています。
    なので、読み取りが0バイトであるかどうか、常に確認しないといけません。
    また、読み取りはなるべく同時にたくさん行うとよいでしょう。

    > byte[] buffer = new byte[66];
    > int pointer = 0;
    > int receivebytes = 0;
    >
    > while(pointer < buffer.Length){
    > receivebytes = serialPort1.Read(buffer, pointer, buffer.Length - pointer);
    > if (receivebytes==0) throw new XXXException();
    > pointer += receivebytes;
    > }
    >
記事No.18563 のレス /過去ログ36より / 関連記事表示
削除チェック/

■18627  Re[4]: マイコン(PIC)とのシリアル通信
□投稿者/ 組込系の人 -(2008/05/15(Thu) 10:19:10)
    No18620 (れい さん) に返信
    > ■No18605 (組込系の人 さん) に返信
    >>こんな感じでどうでしょうか?
    >
    > serialPort1のクラスが不明なので正確なところはわかりませんが、
    > たぶんダメですね。

    すいません。自分はSystem.IO.Ports.SerialPortと仮定して話してました。



    >
    > StreamのRead/Writeの実装にはいくつかの流儀があります。
    > 昔はいろいろありましたが、
    > 最近は以下の振る舞いが一般的です。
    >
    > ・Readが戻るのは
    > 「バッファがいっぱいになる」
    > 「エラーが発生する」
    > 「ストリームが終わっている(戻り値=0)」
    > 「1バイト以上読み取る(戻り値=読み取ったバイト数)」
    >
    > ・Writeが戻るのは
    > 「バッファを全て書き終わる」
    > 「エラーが発生する」
    >
    > です。
    > .Netでもこれが採用されています。
    > なので、読み取りが0バイトであるかどうか、常に確認しないといけません。
    > また、読み取りはなるべく同時にたくさん行うとよいでしょう。
    >
    >> byte[] buffer = new byte[66];
    >> int pointer = 0;
    >> int receivebytes = 0;
    >>
    >> while(pointer < buffer.Length){
    >> receivebytes = serialPort1.Read(buffer, pointer, buffer.Length - pointer);
    >> if (receivebytes==0) throw new XXXException();
    >> pointer += receivebytes;
    >> }
    >>
    >

    RS232通信なんかやってると、良くSTXだのETXだのの処理で1文字ずつやりたいので
    読み込み時に1文字づつ取ってました。
    通信が連続していても、ETX受信直後にACK応答を返さないといけないとか
    その他もろもろの制約でこのような処理になっていたような・・・
    自分が使っているところでは、1文字読み取ったあとに、
    ごちゃごちゃと処理をしています。例として示すには不適切でした。

    たしかに読み込みは一気にやって読み取った後に1文字づつ解析すればいいですね。
記事No.18563 のレス /過去ログ36より / 関連記事表示
削除チェック/

■18642  Re[5]: マイコン(PIC)とのシリアル通信
□投稿者/ れれれ -(2008/05/15(Thu) 11:03:08)
    No18627 (組込系の人 さん) に返信
    No18620 (れい さん) に返信
    お二方が示してくれた例のどちらでも1回で受信できました。
    ありがとうございます。
記事No.18563 のレス / END /過去ログ36より / 関連記事表示
削除チェック/

■19078  Re[2]: Processの標準出力をリアルタイム取得
□投稿者/ れい -(2008/05/20(Tue) 10:32:26)
    2008/05/20(Tue) 10:36:01 編集(投稿者)

    No19076 (シャノン さん) に返信
    > (非同期読み取りは内部的にマルチスレッドなので)、こんなコードでできました。

    どこまで考えるかによりますが、
    ユーザーモードの範囲内なら非同期読み取りはマルチスレッドでないものもありますよ。
    特にストリームは。

    > 他にも方法はあるかと思います。

    じゃあWindows.Formsで。
    ただ、鶏唐揚さんが何をしたいのかいまいちよくわからないのですよね。
    こんな簡単なのでいいのかしら?


    Dim proc As Process
    Dim ar As IAsyncResult
    Dim dlg As ReadLine
    Delegate Function ReadLine() As String

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    If proc IsNot Nothing Then Exit Sub
    proc = New Process

    With proc.StartInfo
    .FileName = "PING"
    .Arguments = "192.168.68.1" '私のプライベートアドレスはこれ。
    .RedirectStandardOutput = True
    .WindowStyle = ProcessWindowStyle.Hidden
    .CreateNoWindow = True
    .UseShellExecute = False
    End With

    proc.Start()
    dlg = New ReadLine(AddressOf proc.StandardOutput.ReadLine)
    ar = dlg.BeginInvoke(Nothing, Nothing)
    Timer1.Start()
    End Sub

    Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
    If ar.IsCompleted Then
    Dim str As String
    str = dlg.EndInvoke(ar)
    If str Is Nothing Then
    Timer1.Stop()
    proc = Nothing
    Else
    Me.TextBox1.Text &= str & ControlChars.NewLine
    ar = dlg.BeginInvoke(Nothing, Nothing)
    End If
    End If
    End Sub

    追記。

    > Startで固まるというのは、PINGコマンドが完了するまでメインスレッドが待機して
    > しまうということです。WaitForExitを外しても同様でした。

    StartではなくReadToEndで固まってるのではないですか?

    > コマンドプロンプトで単純に
    > PING xxx.xxx.xx.xx
    > と打つと、(PINGが通る場合は)通常は約1秒ごとにReply from...と
    > 4回表示されると思いますが、これをそのままのタイミングで
    > 標準出力を奪って表示したいということです。

    とすると、ストリームの扱いに慣れていないのでしょう。
    No18620 の投稿とかにちょっと書いたので参考に。
記事No.19072 のレス /過去ログ37より / 関連記事表示
削除チェック/

■23399  Re[4]: 東京勉強会#24準備スレ
□投稿者/ 出水 -(2008/08/13(Wed) 18:41:59)
    >> LTなら準備も楽そうだし
    >果たしてそうかな(ニヤリ)。
    >επι的には通常枠の数倍キツいっす!!

    なんか手を上げたことを後悔させるような人々ががが
記事No.23295 のレス /過去ログ44より / 関連記事表示
削除チェック/

■95397  Re[3]: string配列を関数に渡したい
□投稿者/ marusa -(2020/07/28(Tue) 15:43:40)
    No95395 (ぶなっぷ さん) に返信
    詳細な解説ありがとうございます。
    > つまり、getLen()関数に渡した時点で、
    > std::string arr[2]
    > は
    > std::string* arr
    > に型が変わっちゃうんです。
    関数に渡した時点でどうしてもポインタになってしまうのですね。利用する場合は配列のように利用できるので気付いていませんでした。
記事No.95392 のレス / END /過去ログ165より / 関連記事表示
削除チェック/



<< 0 >>

パスワード/

- Child Tree -