3

访问 2003 和 VS 2010 C#

更新这个软件是为 Windows XP 构建的

我担心的是更新 7 - 谢谢

我创建了一种方法,用户可以在富文本框中插入路径目录的命令参数并将其保存在数据库中。我想创建一个超链接,用户可以在 RichTextBox 中单击该链接,在外部打开 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();
   }

File 是 Access 2003 中保存目录的数据字段。顺便说一句,文件数据字段的数据类型为超链接。

从本网站更新 2第二次尝试,此处符合但未打开 Windows 资源管理器

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

更新 3 第三次尝试 这是我的尝试: 目的是当我单击路径时,在 Richtextbox 中,Windows 资源管理器应该打开它没有打开。实际上什么也没发生,也没有错误

我确实想指出文件可以使用插入命令参数保存在不同的文件夹中,但使用相同的驱动器。所以例如..

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中选择路径目录时,如何使用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);

    }

更新 6 使用导航按钮时打开 Windows 资源管理器的原因是 richTextBox1_TextChanged 中的一段代码。如果我在richTextBox1_MouseClick 方法中使用那段代码,那么资源管理器将打开。


更新 7 我正在使用导航按钮,从主页和学习网站。我创建了一个富文本框来打开默认的窗口资源管理器路径目录。我试图通过使用选择查询来进一步扩展,其中 id 是等,所以当 Windows 资源管理器在外部打开时可以根据表 ID 打开不同的路径目录吗?

例如有两个 doc 文件,Test.doc 和 Test.doc...

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.CommandText是 SQL 查询命令。
  • cmd.ExecuteNonQuery()将简单地执行 SQL 查询,但完全丢弃任何结果。
    • 您真正想要使用的是cmd.ExecuteScalar()返回第一行的第一列(在您的情况下,您只关心第一行和第一列)。

更新

  1. 如我的示例中使用的那样,使用using语句;它会负责清理OleDbCommand对象(尤其是在出现异常的情况下)。

  2. 使用完整性检查(if 语句、空值检查等):我已经更新了上面的答案以反映这一点。

  3. 您想通过仅检索第一条记录(使用)来提高性能(尽管过早地TOP 1)。

于 2013-04-04T20:14:32.460 回答
0

我想我明白了你的要求,它是如何在选择特定文件的情况下启动资源管理器。我不认为你可以用 URI 来做,所以你必须启动一个资源管理器进程。还有一些其他问题得到了答案,应该对您有所帮助。

在资源管理器中打开文件夹并选择文件

打开资源管理器窗口并选择指定文件

实施“打开包含文件夹”并突出显示文件

不过,总结是您需要启动“explorer.exe /select,full-path-to-file”

于 2013-04-01T18:24:02.003 回答
0

为了使用LinkClicked()处理程序,富文本框中的链接必须是格式正确的超链接,例如

file://C:/Windows

并且富文本框控件的属性必须.DetectUrls设置为True. 如果是这种情况,那么富文本控件框中的链接应该看起来像一个 Web 链接(通常是蓝色并带有下划线),并且您可以在单击它时打开一个资源管理器窗口,只需使用以下代码

    private void richTextBox1_LinkClicked(object sender, LinkClickedEventArgs e)
    {
        System.Diagnostics.Process.Start(e.LinkText);
    }
于 2013-04-02T16:58:38.997 回答