winforms 如何在OpenFileDialog中使用组合框选定项选择文件?

n53p2ov0  于 2022-11-16  发布在  其他
关注(0)|答案(1)|浏览(211)

大家好!我一直在寻找一个解决方案,但我画了一个空白?我用的是Win Forms,VS 2019,Win10,VB .NET.
"我需要什么"
1.我正在使用文件夹中的文件名填充组合框; 2.单击组合框中的一个项目,使用OpenFileDialog选择一个文件,该文件将使用文本文件中与组合框中的选定项目相对应的行填充ListBox。这一切都正常!
我想做的是:当用户单击组合框中的项目时,我希望打开“打开文件”对话框,其中包含与组合框中单击的项目相对应的已选定文件。

我正在使用的代码

我将在组合框的SelectedIndexChanged事件中使用以下代码,以使用“打开文件”对话框打开默认文件夹,用户可以在该文件夹中选择要用于填充列表框的文件:

Dim openfile = New OpenFileDialog() With {.Filter = "Text (*.Text)|*.txt"}

    With openfile
        .InitialDirectory = "C:\Users\" + "username" + "\Documents\WIN32 VIEWER"
    End With

    If (openfile.ShowDialog() = System.Windows.Forms.DialogResult.OK) Then

        For Each line As String In File.ReadAllLines(openfile.FileName)
            ListBox1.Items.Add(line)
        Next
    End If

"我所尝试的"
我已经成功地在另一个程序中使用了下面的代码,在“打开文件”对话框中选择了相应的文件。但是,我不知道如何将此代码应用到上面的“我正在使用的代码”示例中。我尝试过了,但是找不到一种方法将“/select”命令应用到我的示例代码中?也许有一种不同的方法可以做到这一点?如果有人能给予我一个例子或指出一个例子,如何实现这一点,我将非常感激!

Dim sFileName As String = ofd.FileName  (Original code uses: "C:\Images\Test.png")
    Process.Start("explorer.exe", "/select," & sFileName)
pzfprimi

pzfprimi1#

几点建议:

  • 您可以构建一个类(此处命名为DisplayFile),该类使用File(完整路径)进行初始化,然后公开在您的上下文中有用的属性和方法:
  • 返回一个Title为的文件(这里,File name不带扩展名)
  • 文件名和路径
  • 以字符串数组形式返回File内容的公共方法(GetLines()
  • 重写ToString()以返回Title属性值
Friend NotInheritable Class DisplayFile
    Public Sub New(pathOfFile As String)
        FilePath = pathOfFile
        FileName = Path.GetFileName(pathOfFile)
        Title = Path.GetFileNameWithoutExtension(pathOfFile)
    End Sub
    Public ReadOnly Property FileName As String
    Public ReadOnly Property FilePath As String
    Public ReadOnly Property Title As String

    Public Function GetLines() As String()
        Return File.ReadAllLines(FilePath)
    End Function

    Public Overrides Function ToString() As String
        Return Title
    End Function
End Class

在窗体中,从Directory.Getfiles()初始化此类对象的列表。
使用此集合初始化ComboBox的DataSource。由于未设置DisplayMember,因此每个Item都显示[object].ToString()的结果:在本例中,[DisplayFile].ToString()返回Title属性值(表示不带扩展名的文件名)

Imports System.IO

Public Class SomeForm
    Private displayFiles As List(Of DisplayFile) = Nothing

    Public Sub New()
        InitializeComponent()

        Dim filesPath = Path.Combine(Environment.GetFolderPath(
            Environment.SpecialFolder.MyDocuments), "WIN32 VIEWER")
        displayFiles = Directory.GetFiles(filesPath, "*.txt").Select(Function(f) New DisplayFile(f)).ToList()
        cboFilesList.DataSource = displayFiles
        cboFilesList.SelectedIndex = -1
    End Sub
End Class

由于ComboBox的每个Item都是DisplayFile对象,因此将[ComboBox]SelectedItem转换为DisplayFile并调用其GetLines()方法,以便用File:
订阅ComboBox的SelectionChangeCommitted事件

' [...]
Private Sub someComboBox_SelectionChangeCommitted(sender As Object, e As EventArgs) Handles someComboBox.SelectionChangeCommitted
    someListBox.Items.Clear()
    someListBox.Items.AddRange(CType(someComboBox.SelectedItem, DisplayFile).GetLines())
End Sub
' [...]

相关问题