使用组合框选择打开文件

已加入
2020年3月31日
留言内容
21
编程经验
Beginner
嗨,大家好。
我想创建一个应用程序,其中会根据组合框的选择打开不同的文件。下面是我想做的图像
1587738494218.png

如果我选择File1.pdf并单击“打开”按钮,则文件在RTF文本框中打开。与其他文件相同(File2.pdf .... so等)。
另外,如果我将文件添加到包含文件的文件夹中,则组合框也会更新。
任何建议或提示如何开始。读什么?如何开始?因为我是新手

谢谢和最好的问候
 

金西尼

C#论坛主持人
工作人员
已加入
2011年4月23日
留言内容
3,491
地点
悉尼,澳大利亚
编程经验
10+
首先,您无法在 RichTextBox 控制。该控件可以显示纯文本或RTF文本,类似于包含文本本身和格式信息的HTML标记。如果要显示PDF文件的内容,则需要专用的PDF组件,或者需要了解PDF的Web浏览器控件。

至于 组合框 以及文件名/路径,我建议您执行以下操作:
C#:
var folder = new DirectoryInfo(folderPath);
var files = folder.GetFiles("*.pdf");

myComboBox.DisplayMember = "Name";
myComboBox.ValueMember = "FullName";
myComboBox.DataSource = files;
myComboBox.SelectedItem = null;
这将显示指定文件夹中所有PDF文件的名称。您可以处理 选择变更提交 的事件 组合框 并从中获取所选文件的路径 选定值 属性,然后按照您的意愿去做。

如果您希望能够在文件夹内容更改时以及在文件夹内容更改时更新文件列表,则可以使用 FileSystemWatcher 组件,以监视文件夹并在发生更改时引发事件。我现在不会详细介绍。您应该进行一些研究,并尽最大的努力来实施它,然后再询问是否遇到问题。

您应该为此启动一个新线程。请将每个主题归为一个主题,将每个主题归为一个主题。我们不应该谈论填充 组合框,在同一线程中显示PDF文件内容和监视文件夹。这就是为什么您需要做更多的工作以将问题分解成更小的部分,然后分别解决每个部分的原因。询问有关特定问题的特定问题,而不是一次询问多步骤过程的每个部分。
 

羊皮

退休程序员
工作人员
已加入
2018年9月5日
留言内容
1,919
地点
英国
编程经验
10+
如果我选择File1.pdf并单击“打开”按钮,则文件在RTF文本框中打开。与其他文件相同(File2.pdf .... so等)。
您将需要一个PDF库来转换内容: 面向开发人员的领先PDF平台|文字 -我相信它也可以将pdf转换为文本。理想情况是在Nuget中搜索pdf文本: NuGet画廊|软件包匹配pdf文本 并选择。
另外,如果我将文件添加到包含文件的文件夹中,则组合框也会更新。
我建议在新线程中运行while循环以检查目录中是否有新文件。如果文件是新文件,并且列表中不存在,则将它们添加到文件中。如果存在任何新文件,则如果该值尚不存在,则将它们从头开始添加到组合框中。注意;本示例使用带有委派的多线程跨线程示例,并将按发布方式工作。但是,这是伪代码……是您需要的工作模拟,您将需要从#2或类似的代码中实现代码,以将每个文件获取到源目录中。我已经突出显示了您应该放置上述代码的行。
C#:
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private bool Run_While { get; set; }

        public void ExecuteThis()
        {
            /* Start a new thread and run it */
            Thread new_Thread = new Thread(Execute_Non_UI);
            new_Thread.Start();
        }

        public delegate void Call_Back_To(string new_Value);

        private void Update_UI(string this_NewString)
        {
            /* I am talking with your UI, and I can update your UI with the new value. */
            comboBox1.Items.Add(this_NewString);
        }
        private void Execute_Non_UI()
        {
            清单<string> 清单_Of_Files = new 清单<string>();
            while (Run_While)
            {
                /* I am on a new thread, (the non UI thread) */
                /* Invoke the control, by calling on the delegation of the Update_UI method followed by the parameter value from the Update_UI method. */

                /* ****************** */
                if (!List_Of_Files.Contains("Some file"))
                清单_Of_Files.Add("Your file paths here");
                /* Include the logic here for checking your folder for new files from your directory, to add to the combobox. */
                using (List<string>.Enumerator File = 清单_Of_Files.GetEnumerator())
                {
                    while (File.MoveNext())
                    {
                        if (!comboBox1.Items.Contains(File.Current))
                            comboBox1.Invoke(new Call_Back_To(Update_UI), File.Current); /* Here you apply the logic in JM's post to this code to add your PDF's to combobox. */
                    }
                }
                /* ****************** */

            }
        }
        private void button1_Click(object sender, EventArgs e)
        {
            if (!Run_While)
            {
                Run_While = true;
                ExecuteThis();
            }
            else
                Run_While = false;
        }
    }

没错,您确实应该使用WPF而不是Winforms。 Winforms实际上已经寿终正寝了。实际上,Microsoft不想再支持它了,而实际上他们是为仍使用Winforms应用程序的企业客户提供的。但是,Microsoft鼓励用户转向WPF。

无论如何,我希望这会有所帮助。

编辑-修正第41行的错字
 
Last edited:
最佳 底部