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

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

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

全過去ログを検索

<< 0 >>
■7129  Re[3]: エクスプローラの右クリックメニュー
□投稿者/ 魔界の仮面弁士 -(2006/10/03(Tue) 18:27:54)

    分類:[C#] 

    COM Interop に関する知識が要求されるかと思います。

    > 右クリックでエクスプローラと同じコンテキストメニューを表示させたいのですが、

    試していませんが、右クリックした項目(IShellFolderインターフェイス)の
    GetUIObjectOfメソッドで IID_IContextMenu/IID_IContextMenu2 を得て、そこから
    QueryContextMenu → TrackPopupMenu → InvokeCommand → DestroyMenu を呼び、
    さらに、WndProc メソッドのオーバーロード側で、WM_INITMENUPOPUP,
    WM_DRAWITEM, WM_MENUCHAR, WM_MEASUREITEM 等のウィンドウメッセージを
    捕らえて、IContextMenu2.HandleMenuMsg メソッドを呼び出すようにすれば、
    エクスプローラと同じコンテキストメニューが得られると思います。


    > 方法がわからずに悩んでおります。

    .NET での実装ではありませんが、下記が何かしらの参考になりますでしょうか。

    VC++ での実装例。
    http://forums.belution.com/ja/vc/000/009/39.shtml

    VB6 による実装例。
    (mIShellFolderDefs の ShowShellContextMenu メソッドで処理しています)
    http://btmtz.mvps.org/vbexplorer/


    > わんくまフォーラムでは特に禁止されていないとは思いますが、
    > マナー的にはあまりいいものではありませんね。

    No6906 を参照。
記事No.7122 のレス /0過去ログ7より / 関連記事表示
削除チェック/

■51853  DateTime
□投稿者/ asami -(2010/07/22(Thu) 18:13:27)

    分類:[.NET 全般] 

    2010/07/22(Thu) 18:58:13 編集(投稿者)

     	
    LINQ TO SQLを使用してDateTime型のデータを取り出す際に
    書式を指定したいのですが、

    以下のようにしても実行時に例外となっています。
    取得方法としてあやまっていますでしょうか?


    // System.Nullable<System.DateTime> InsertDate


    var query =
    from f in context.Fruits
    select new
    {
    INSERT_DATE = f.InsertDate.Value.ToString("YYYYMMDD")//ここです
    }

    例外は以下のとおりです。
    System.NotSupportedException:
    メソッド 'System.String ToString(System.String)' には、
    サポートされる SQL への変換がありません。


    アドバイスいただけますでしょうか。

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

■66724  Re[6]: C# Postgre URL、リストボックスへ格納、表示
□投稿者/ こりんご -(2013/05/20(Mon) 06:58:59)
    PostgreSQL は所有していないので
    SQLServer にて検証。
    
    データベース名:test
    テーブル名:data1 〜 data5
    
    >>DBに格納された後は、格納された順にURLが読み込まれて、一定の間隔で画面に表示されるようにする。
    については、リストボックスの値を順次取得しつつページの読み込みが完了するまで
    値の取得を止めておく手段がわからないので、あくまでリストボックスの値を
    データベースに入れていく部分のみに限定。
    
    using System.Data.SqlClient;
    
    namespace FormsApplication1
    {
        public partial class Form1 : Form
        {
            public Form1()
            {
                InitializeComponent();
            }
            
            private void Form1_Load(object sender, EventArgs e)
            {
    
                for (int i = 1; i <= 5; i++)
                {
                    (Controls["listBox" + i] as ListBox).AllowDrop = true;
                    (Controls["listBox" +i ] as ListBox).DragEnter += new DragEventHandler(listBox_DragEnter);
                    (Controls["listBox" + i] as ListBox).DragDrop += new DragEventHandler(listBox_DragDrop);
                }
            }
    
            private void listBox_DragEnter(object sender, DragEventArgs e)
            {
                //URLのみ受け入れる//@ITより
                if (e.Data.GetDataPresent("UniformResourceLocator"))
                    e.Effect = DragDropEffects.Link;
                else
                    e.Effect = DragDropEffects.None;
            }
    
            private void listBox_DragDrop(object sender, DragEventArgs e)
            {
                //ドロップされたリンクのURLを取得する//@ITより
                String url = e.Data.GetData(DataFormats.Text).ToString();
                //結果を表示
                ((ListBox)sender).Text = url;
                //MessageBox.Show(url);
                //ドロップされたデータがString型か調べる
                if (e.Data.GetDataPresent(typeof(String)))
                {
                    ListBox target = (ListBox)sender;
                    //ドロップされたデータ(String型)を取得
                    String itemText =
                        (String)e.Data.GetData(typeof(String));
                    //ドロップされたデータをリストボックスに追加する
                    target.Items.Add(url);
                    //MessageBox.Show("表示");
                }
            }
    
            private void button1_Click(object sender, EventArgs e)
            {
    
                SqlCommand scm;
                SqlConnection scn = new SqlConnection("Data Source=." + @"\SQLEXPRESS;AttachDbFilename=D:\SQLServer\test.mdf;" +
                                                      "Integrated Security=True;Connect Timeout=30;User Instance=True");
                String sql;
                SqlParameter sParam;
                scn.Open();
    
    
                for (int i = 1; i <= 5; i++)
                {
                     if ((Controls["listBox" + i] as ListBox).Items.Count > 0)
                     {
                         sql = string.Format("INSERT INTO data{0} VALUES(@url)",i);
                         scm = new SqlCommand(sql, scn);
                         sParam = new SqlParameter("@url", SqlDbType.NChar);
                         
                       for (int m = 0; m <= (Controls["listBox" + i] as ListBox).Items.Count - 1; m++)
                       {
    
                           String url1 =(string)(Controls["listBox" + i] as ListBox).Items[m];
                           sParam.Value = url1;
                           scm.Parameters.Clear();
                           scm.Parameters.Add(sParam);
                           scm.ExecuteNonQuery();
                       }
                     }
                }
    
                //SqlDataReader srd;
                //sql = ("Select * From data1");
                //scm = new SqlCommand(sql, scn);
                //srd = scm.ExecuteReader();
    
                //while (srd.Read())
                //{
                //  MessageBox.Show(srd.GetString(0));
                //} 
                scn.Close();
            }
        }
    }
    
    C#の経験不足に加えSQLServer は今回初めて(インストール含め)なので
    至らぬ点はあると思いますが、何か手がかりになれば幸いです。
記事No.66703 のレス /過去ログ113より / 関連記事表示
削除チェック/

■83388  Re[2]: DataGridViewのRowTemplateがきかない
□投稿者/ はる -(2017/03/20(Mon) 19:58:53)
    Hongliang さん

    ありがとうございました。
    教えていただいた内容でいけました。


    DataGridViewRow r1 = (DataGridViewRow)dgv.RowTemplate.Clone();
    r1.CreateCells(dgv);
    r1.SetValues(new object[] { "111", "222", "333" });
    DataGridViewRow r2 = (DataGridViewRow)dgv.RowTemplate.Clone();
    r2.CreateCells(dgv);
    r2.SetValues(new object[] { "444", "555", "666" });
    this.dgv.Rows.AddRange(new DataGridViewRow[] { r1, r2 });
記事No.83379 のレス / END /過去ログ142より / 関連記事表示
削除チェック/

■90007  Re[16]: リッチテキストボックスでカラー情報をコピーする方法
□投稿者/ イエメン -(2019/01/29(Tue) 14:44:40)
    ありがとうございます。
    
    以下のようにしてみましたが、やはり1回目ではうまくいかず2回ペーストする必要があります。
    
    BeginInvokeは非同期でバックグラウンドプロセスからフォアグラウンドプロセスに指令を投げるものだと思いますが、
    GUIから使っても良いのでしょうか?
    そして、それで遅延が発生するのでしょうか?
    
                Dim oldCursor = Cursor.Current
                Cursor.Current = Cursors.WaitCursor
    
                Dim xlApp As Object = Nothing
                Try
                    xlApp = GetObject(, "Excel.Application")
                    CallByName(xlApp, "CutCopyMode", CallType.Let, False)
                Catch
                Finally
                    If xlApp IsNot Nothing AndAlso Marshal.IsComObject(xlApp) Then Marshal.ReleaseComObject(xlApp)
                End Try
                BeginInvoke(Sub()
    
                                Clipboard.Clear()
                                RichTextBox1.Copy()
    
    
                                ' Excel 書式を維持するため、Word 経由で複写
                                Dim wApp As Object = Nothing
                                Dim wDocs As Object = Nothing
                                Dim wDoc As Object = Nothing
                                Dim wRng As Object = Nothing
    
                                Try
    
                                    wApp = CreateObject("Word.Application")
                                    wDocs = CallByName(wApp, "Documents", CallType.Get)
                                    wDoc = CallByName(wDocs, "Add", CallType.Method)
                                    wRng = CallByName(wDoc, "Range", CallType.Method)
                                    CallByName(wRng, "Paste", CallType.Method)
                                    CallByName(wRng, "Copy", CallType.Method)
                                Catch
                                Finally
                                    If wRng IsNot Nothing AndAlso Marshal.IsComObject(wRng) Then Marshal.ReleaseComObject(wRng)
                                    If wDoc IsNot Nothing AndAlso Marshal.IsComObject(wDoc) Then Marshal.ReleaseComObject(wDoc)
                                    If wDocs IsNot Nothing AndAlso Marshal.IsComObject(wDocs) Then Marshal.ReleaseComObject(wDocs)
                                    If wApp IsNot Nothing AndAlso Marshal.IsComObject(wApp) Then
                                        CallByName(wApp, "Quit", CallType.Method, False)
                                        Marshal.FinalReleaseComObject(wApp)
                                    End If
                                End Try
    
                                Cursor.Current = oldCursor
    
                            End Sub)
    
記事No.89928 のレス /過去ログ155より / 関連記事表示
削除チェック/

■90008  Re[17]: リッチテキストボックスでカラー情報をコピーする方法
□投稿者/ 魔界の仮面弁士 -(2019/01/29(Tue) 15:57:06)
    No90002 (イエメン さん) に返信
    > 1回目で文字列は代入されるようになったのですが、
    > カラーフォントなどがペーストされず、書式無しの文字列になってしまいます

    うまくいかない「1 回目」の時に、クリップボード内に
    "HTML Format" なデータは含まれていましたか?


    "HTML Format" が含まれていない場合は、Debug.WriteLine 等を仕込んで、
    Word 側の呼び出しコードが呼び出されているかどうかを確認してみてください。


    "HTML Format" が含まれているのに、それでも正しく受け渡せないなら、
    クリップボードの格納順や内容が、1 回目と 2 回目でどのように変化しているか
    確認してみてください。


    ひとまず Sleep や DoEvents を入れた方が安定するのなら、
    幾許かの待機処理は入れておいた方が良いのかも。



    No90007 (イエメン さん) に返信
    > やはり1回目ではうまくいかず2回ペーストする必要があります。

    何も貼れないときは、クリップボード操作がエラーになっているのかな…。

    Word を操作しても "HTML Format" が含まれていないようなら、
    Word 側へのペースト&コピーが失敗して Catch 句を通過していないかをチェックしてみてください。
    ※例: ExternalException (0x800401D0 = CLIPBRD_E_CANT_OPEN)

    もしエラーになるようなら、引数 4 個な Clipboard.SetDataObject メソッドの実装のように、
    失敗時に一定間隔で再試行するような実装を設ける必要があるかもしれません。


    # 今ちょっと、試せる環境が手元に無い…。
記事No.89928 のレス /過去ログ155より / 関連記事表示
削除チェック/

■97484  Re[3]: ClosedXMLで改ページ設定取得について
□投稿者/ Hongliang -(2021/05/25(Tue) 08:47:51)
    Excel 2016のページレイアウトメニューには「印刷範囲」「改ページ」がありますが、PrintAreasは文字通り印刷範囲のほうでは?
    改ページは.PageSetup.ColumnBreaks/RowBreaksで取得できるように思います。
記事No.97478 のレス /過去ログ169より / 関連記事表示
削除チェック/



<< 0 >>

パスワード/

- Child Tree -