gpt4 book ai didi

c# - 如何使用 RichTextBox 打开带有获取目录路径、db 的窗口资源管理器?

转载 作者:太空宇宙 更新时间:2023-11-03 13:44:46 26 4
gpt4 key购买 nike

Access 2003 &VS 2010 C#

更新本软件专为Windows XP打造

我的问题是更新 7 - 谢谢

我创建了一种方法,用户可以在其中为富文本框中的路径目录插入命令参数并将其保存在数据库中。我想创建一个超链接,用户可以在其中单击链接,在 richTextBox 中,打开 Windows 资源管理器外部定位文件所在的位置。我不知道我给你的描述中它叫什么,但最接近我要找的是 here , 和 here但我不太确定这是否是我正在寻找的?如果有人可以帮助我,我将不胜感激,在此先感谢。

这是我的 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本网站的第二次尝试,here符合但不打开 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

有了它,它就可以工作了,但如上所述,它会自动打开带有导航按钮的路径目录。我不希望发生这种情况。我想单击 richtextbox 中的链接以打开 Windows 资源管理器。我正在使用家里的代码并学习导航,here . 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我正在使用导航按钮,从家里和学习网站。我创建了一个 richtextbox 来打开默认窗口资源管理器路径目录。我试图通过在 id 等处使用选择查询来进一步扩展,因此当从外部打开 Windows 资源管理器时,是否可以根据表 ID 打开不同的路径目录?

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

ID = 1 有 pathdirectory like = myFolder\myFolder\Test.doc

ID = 2 有 pathdirectory like = 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();

提前致谢

最佳答案

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 语句、null 检查等):我已经更新了上面的答案以反射(reflect)这一点。

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

关于c# - 如何使用 RichTextBox 打开带有获取目录路径、db 的窗口资源管理器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15746967/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com