3

Access 2003 & VS 2010 C#

このソフトウェアの更新は、Windows XP 用に構築されています

私の懸念はアップデート 7 にあります - ありがとう

ユーザーがパスディレクトリのコマンドパラメーターをリッチテキストボックスに挿入してデータベースに保存できるメソッドを作成しました。ユーザーがリンクをクリックできるハイパーリンクを作成したいと思います。リッチテキスト ボックスで、Windows エクスプローラーを外部で開き、ファイルの場所を特定します。私があなたに与えた説明でそれが何と呼ばれているのかわかりませんが、私が探しているものに最も近いのはherehere ですが、それが私が探しているものかどうかはよくわかりません? 誰かが私を助けることができれば、私は最も感謝しています。

これは私の btnOpen_Click メソッドです...

OpenFileDialog openFileDialog1 = new OpenFileDialog();
        openFileDialog1.InitialDirectory = "C:\\";
        openFileDialog1.Filter = "Word 97-2003 Document(*.doc)|*.doc|All files(*.*)|*.*";

        if (openFileDialog1.ShowDialog() == System.Windows.Forms.DialogResult.OK)
        {
            openFileDialog1.FilterIndex = 0;
            openFileDialog1.RestoreDirectory = true;
            richTextBox1.Text = Path.GetDirectoryName(openFileDialog1.FileName); 
        }

        try
        {
            string filePath;
            filePath = Path.GetDirectoryName(openFileDialog1.FileName); //Path.GetDirectoryName(openFileDialog1.FileName) openFileDialog1.FileName
            richTextBox1.Text = filePath;
        }

        catch (Exception ex)
        {
            MessageBox.Show("Error: : " + ex.Message);
        }

これは私の挿入方法です...

    private void btnInsert_Click(object sender, EventArgs e)
    {
        OleDbCommand cmd = new OleDbCommand();
        cmd.CommandType = CommandType.Text;
        cmd.CommandText = "INSERT INTO Table1 File) Values(@File)
        cmd.Parameters.AddWithValue("@File", richTextBox1.Text);
        cmd.Connection = myCon;
        myCon.Open();
        cmd.ExecuteNonQuery();
        myCon.Close();
   }

ファイルは、ディレクトリが保存される Access 2003 のデータ フィールドです。ところで、ファイル データ フィールドのデータ型はハイパーリンクです。

このWebサイトから2回目の更新を試みます。ここでは準拠していますが、Windowsエクスプローラーは開きません

 private void richTextBox1_LinkClicked(object sender, LinkClickedEventArgs e)
    {
        string FilePath = @"C:\myFolder\myFolder";
        System.Diagnostics.Process.Start("Explorer.exe", @"/select,""" + FilePath + "\"");
     }

更新 3 3 回目の試み ここで私の試み: 目的は、パスをクリックすると、richtextbox で Windows エクスプローラーが開くはずですが、開かないことです。実際には何も起こっておらず、エラーもありません

insert コマンド パラメーターを使用して同じドライブを使用して、ファイルをさまざまなフォルダーに保存できることを指摘したいと思います。だから例えば..

C:\マイフォルダー\マイフォルダー1

C:\マイフォルダー\マイフォルダー2

    private void richTextBox1_LinkClicked(object sender, LinkClickedEventArgs e)
    {
       string FilePath = @"C:\\myFolder\\myFolder";
       System.Diagnostics.Process.Start("Explorer.exe", @"/select," + FilePath + e.LinkText);
       // 1*
    }

    private void richTextBox1_TextChanged(object sender, EventArgs e)
    {
        richTextBox1.LinkClicked += new System.Windows.Forms.LinkClickedEventHandler             
        (richTextBox1_LinkClicked);

    }

// 1* - richTextBox1_LinkClicked コードを richTextBox1_TextChanged に配置すると、ナビゲーション ボタンを使用すると、Windows エクスプローラーが自動的に開きます。

パス ディレクトリが Access 2003 データベースに保存されているときに、richTextBox でパス ディレクトリを選択すると、リッチテキスト ボックスを使用して Windows エクスプローラーを開く方法を教えてください。

更新 4 このマイ ドキュメントを使用したくないナビゲーション ボタンを使用すると、このマイ ドキュメントが開きます。

private void richTextBox1_TextChanged(object sender, EventArgs e)
    {
        string FilePath = @"C\\Windows";
        System.Diagnostics.ProcessStartInfo exploreTest = new System.Diagnostics.ProcessStartInfo();
        exploreTest.FileName = "Explorer.exe";
        exploreTest.Arguments = FilePath;
        System.Diagnostics.Process.Start(exploreTest);
    }

    private void richTextBox1_LinkClicked(object sender, LinkClickedEventArgs e, string path)
    {
       System.Diagnostics.Process.Start(e.LinkText);
    }

更新 5

これで動作しますが、上記のように、ナビゲーション ボタンでパス ディレクトリが自動的に開きます。そうなってほしくない。リッチテキスト ボックスのリンクをクリックして、Windows エクスプローラーを開きます。私は自宅のコードを使用しており、ナビゲーションについて学習しています。richTextBox1_LinkClicked イベントは機能しません。

 private void richTextBox1_TextChanged(object sender, EventArgs e)
    {
        string FilePath = @"C:\MyFolder\myFolder";
        System.Diagnostics.Process.Start("Explorer.exe", @"/select,""" + FilePath + "\"");
    }

   private void richTextBox1_LinkClicked(object sender, LinkClickedEventArgs e)
    {
        System.Diagnostics.Process.Start(e.LinkText);

    }

Update 6 ナビゲーション ボタンの使用時に Windows エクスプローラーが開いていたのは、richTextBox1_TextChanged 内のコードの一部が原因です。そのコードを richTextBox1_MouseClick メソッドで使用すると、エクスプローラーが開きます。


更新 7 ホームと学習 Web サイトからナビゲーション ボタンを使用しています。デフォルトのウィンドウ エクスプローラー パス ディレクトリを開くためのリッチテキスト ボックスを作成しました。select query where id is などを使ってさらに拡張しようとしているのですが、Windows エクスプローラーを外部で開いたときに、テーブル ID に基づいて別のパス ディレクトリを開くことはできますか?

たとえば、Test.doc と Test.doc という 2 つのドキュメント ファイルがあります。

ID = 1 には、= myFolder\myFolder\Test.doc のようなパス ディレクトリがあります。

ID = 2 には、= myFolder\myFolder2\Test2.doc のようなパス ディレクトリがあります。

このようなことをすることは可能ですか..

private void richTextBox1_MouseClick(object sender, MouseEventArgs e)
{
  OleDbCommand cmd = new OleDbCommand();
  cmd.CommandType = CommandType.Text;
  cmd.CommandText = @"SELECT File FROM Table1 WHERE ID = @ID";
  cmd.Parameters.AddWithValue("@ID", txtID.Text);
  string FilePath = cmd.CommandText;
  // FilePath = @"C:\\myFolder\myFolder";
  System.Diagnostics.Process.Start("Explorer.exe", @"/select," + FilePath);
  cmd.Connection = myCon;
  myCon.Open();
  cmd.ExecuteNonQuery();
  myCon.Close();

}

前もって感謝します

4

3 に答える 3

2

あなたはUpdate 7で望むものに近づいています。

修正された関数は次のとおりです。

private void richTextBox1_MouseClick(object sender, MouseEventArgs e)
{
    Object returnValue;

    using (OleDbCommand cmd = new OleDbCommand())
    {
        cmd.Connection = myCon;
        cmd.CommandType = CommandType.Text;
        cmd.CommandText = @"SELECT TOP 1 File FROM Table1 WHERE ID = @ID";
        cmd.Parameters.AddWithValue("@ID", txtID.Text);

        myCon.Open();
        returnValue = cmd.ExecuteScalar();
        myCon.Close();
    }

    if ((returnValue == null) || (returnValue == DBNull.Value))
    {
        // null was returned, meaning the ID wasn't found, or the "File" field has no value
        // handle the error appropriately...
    }
    else
    {
        // FilePath = @"C:\\myFolder\myFolder";
        String FilePath = returnValue.ToString();

        if (Directory.Exists(FilePath))
        {
            System.Diagnostics.Process.Start("Explorer.exe", @"/select," + FilePath);
        }
        else
        {
            // FilePath doesn't exist!
            // handle the error appropriately...
        }
    }
}

重要なビット

  • cmd.CommandTextSQL クエリ コマンドです。
  • cmd.ExecuteNonQuery()単純に SQL クエリを実行しますが、結果を完全に破棄します。
    • 実際に使用したいcmd.ExecuteScalar()のは、最初の行の最初の列のみを返すものです(あなたの場合、最初の行と最初の列のみを気にします)。

アップデート

  1. 私の例で使用されているように、次のusingステートメントを使用します。オブジェクトのクリーンアップを処理しOleDbCommandます (特に例外の場合)。

  2. 健全性チェックを使用する (if ステートメント、null チェックなど): これを反映するために上記の回答を更新しました。

  3. 最初のレコードのみを取得することで (時期尚早ではありますが) パフォーマンスを改善したいと考えています( を使用TOP 1)。

于 2013-04-04T20:14:32.460 に答える
0

私はあなたが求めていることを理解していると思います.それは、特定のファイルを選択してエクスプローラーを起動する方法です. URI ではできないと思うので、代わりに Explorer プロセスを開始する必要があります。あなたを助けるはずの答えを受け取った他のいくつかの質問があります.

エクスプローラーでフォルダーを開き、ファイルを選択する

指定したファイルが選択された状態でエクスプローラ ウィンドウを開く

「格納フォルダーを開く」を実装し、ファイルを強調表示する

ただし、要約すると、「explorer.exe /select,full-path-to-file」を開始する必要があります。

于 2013-04-01T18:24:02.003 に答える