Выберите или файл или папку от того же диалогового окна в.NET

Для модулей, включая debug, вызываемых в цикле (то есть with_items), будет отображаться значение элемента на каждой итерации. Я не знаю, как это сделать. Если вы хотите, чтобы вы уменьшили свой результат, вы можете попробовать переключиться на использование параметра msg в модуль отладки , который принимает шаблонную строку jinja. Вы можете сделать что-то вроде этого, явно регулируя регулярное выражение, чтобы соответствовать выходу systemctl.

- name: show values
  debug: msg="{{ item.stdout_lines | replace_regex('^(.*).service.*Active: (.*).$', \\\1 \\\2) }}"
  with_items: out.results

Если вы не хотите использовать функцию replace_regex, вы можете рассмотреть возможность создания собственного фильтра , чтобы форматировать данные так, как вам нравится.

В общем, недоступные для прослушивания книги - это отличное место для отображения информации о статусе, собранной с помощью регистрационных данных, фактов и т. д. Выход в плей-лист больше ориентирован на состояние задачи.

31
задан Ksempac 24 June 2009 в 17:21
поделиться

7 ответов

Технически, это возможно. Диалоговое окно оболочки, используемое FolderBrowseDialog, имеет способность возвратить и файлы и папки. К сожалению, та возможность не выставляется в.NET. Даже отражение не может ввести необходимый флаг опции по абсолютному адресу.

, Чтобы заставить его работать, Вы имели бы к P/Invoke SHBrowseForFolder () с флагом BIF_BROWSEINCLUDEFILES включенный в BROWSEINFO.ulFlags (значение = 0x4000). P/Invoke является песчаным, лучше копировать и вставлять код от другой источник или сам класс FolderBrowseDialog со справкой Отражателя.

13
ответ дан 27 November 2019 в 22:43
поделиться

Это было сделано. Можно использовать FolderBrowserDialogEx - допускающая повторное использование производная встроенного FolderBrowserDialog. Этот позволяет Вам вводить в пути, даже пути UNC. Можно просмотреть для папок или files+folders. Можно просмотреть для компьютеров или принтеров с ним. На основе встроенного FBD, но... лучше. Более гибкий. При нажатии на папку в GUI путь появляется в текстовом поле. Если Вы вводите путь, папка получает activatied. Большому количеству опций встроенное диалоговое окно недостает.

Полный Исходный код. Свободный. Общедоступная MS лицензия.

FolderBrowserDialogEx

Код для использования его:

     var dlg1 = new Ionic.Utils.FolderBrowserDialogEx();
     dlg1.Description = "Select a folder to extract to:";
     dlg1.ShowNewFolderButton = true;
     dlg1.ShowEditBox = true;
     //dlg1.NewStyle = false;
     dlg1.SelectedPath = txtExtractDirectory.Text;
     dlg1.ShowFullPathInEditBox = true;
     dlg1.RootFolder = System.Environment.SpecialFolder.MyComputer;

     // Show the FolderBrowserDialog.
     DialogResult result = dlg1.ShowDialog();
     if (result == DialogResult.OK)
     {
         txtExtractDirectory.Text = dlg1.SelectedPath;
     }
5
ответ дан 27 November 2019 в 22:43
поделиться

На основе вышеупомянутых подсказок я нашел некоторый рабочий код, который использует стандартное диалоговое окно Браузера Папки в следующем местоположении: http://topic.csdn.net/t/20020703/05/845468.html

Класс для расширенного Диалогового окна Браузера Папки

Imports System   
Imports System.Text   
Imports System.Windows.Forms   
Imports System.Runtime.InteropServices   

Public Class DirectoryDialog 
    Public Structure BROWSEINFO 
        Public hWndOwner As IntPtr 
        Public pIDLRoot As Integer 
        Public pszDisplayName As String 
        Public lpszTitle As String 
        Public ulFlags As Integer 
        Public lpfnCallback As Integer 
        Public lParam As Integer 
        Public iImage As Integer 
    End Structure 

    Const MAX_PATH As Integer = 260

    Public Enum BrowseForTypes As Integer 
        Computers = 4096 
        Directories = 1 
        FilesAndDirectories = 16384 
        FileSystemAncestors = 8 
    End Enum 

    Declare Function CoTaskMemFree Lib "ole32" Alias "CoTaskMemFree" (ByVal hMem As IntPtr) As Integer 
    Declare Function lstrcat Lib "kernel32" Alias "lstrcat" (ByVal lpString1 As String, ByVal lpString2 As String) As IntPtr 
    Declare Function SHBrowseForFolder Lib "shell32" Alias "SHBrowseForFolder" (ByRef lpbi As BROWSEINFO) As IntPtr 
    Declare Function SHGetPathFromIDList Lib "shell32" Alias "SHGetPathFromIDList" (ByVal pidList As IntPtr, ByVal lpBuffer As StringBuilder) As Integer 
    Protected Function RunDialog(ByVal hWndOwner As IntPtr) As Boolean 

        Dim udtBI As BROWSEINFO = New BROWSEINFO() 
        Dim lpIDList As IntPtr 
        Dim hTitle As GCHandle = GCHandle.Alloc(Title, GCHandleType.Pinned) 
        udtBI.hWndOwner = hWndOwner 
        udtBI.lpszTitle = Title 
        udtBI.ulFlags = BrowseFor 
        Dim buffer As StringBuilder = New StringBuilder(MAX_PATH) 
        buffer.Length = MAX_PATH 
        udtBI.pszDisplayName = buffer.ToString() 
        lpIDList = SHBrowseForFolder(udtBI) 
        hTitle.Free() 
        If lpIDList.ToInt64() <> 0 Then 
            If BrowseFor = BrowseForTypes.Computers Then 
                m_Selected = udtBI.pszDisplayName.Trim() 
            Else 
                Dim path As StringBuilder = New StringBuilder(MAX_PATH) 
                SHGetPathFromIDList(lpIDList, path) 
                m_Selected = path.ToString() 
            End If 
            CoTaskMemFree(lpIDList) 
        Else 
            Return False 
        End If 
        Return True 
    End Function 

    Public Function ShowDialog() As DialogResult 
        Return ShowDialog(Nothing) 
    End Function 

    Public Function ShowDialog(ByVal owner As IWin32Window) As DialogResult 
        Dim handle As IntPtr 
        If Not owner Is Nothing Then 
            handle = owner.Handle 
        Else 
            handle = IntPtr.Zero 
        End If 
        If RunDialog(handle) Then 
            Return DialogResult.OK 
        Else 
            Return DialogResult.Cancel 
        End If 
    End Function 

    Public Property Title() As String 
        Get 
            Return m_Title 
        End Get 
        Set(ByVal Value As String) 
            If Value Is DBNull.Value Then 
                Throw New ArgumentNullException() 
            End If 
            m_Title = Value 
        End Set 
    End Property

    Public ReadOnly Property Selected() As String 
        Get 
            Return m_Selected 
        End Get 
    End Property 

    Public Property BrowseFor() As BrowseForTypes
        Get 
            Return m_BrowseFor 
        End Get 
        Set(ByVal Value As BrowseForTypes) 
            m_BrowseFor = Value 
        End Set 
    End Property 

    Private m_BrowseFor As BrowseForTypes = BrowseForTypes.Directories 
    Private m_Title As String = "" 
    Private m_Selected As String = "" 

    Public Sub New() 
    End Sub
End Class 

код для реализации расширенного диалогового окна

Sub Button1Click(ByVal sender As Object, ByVal e As EventArgs)
    Dim frmd As DirectoryDialog = New DirectoryDialog()
    ' frmd.BrowseFor = DirectoryDialog.BrowseForTypes.Directories   
    ' frmd.BrowseFor = DirectoryDialog.BrowseForTypes.Computers   
    frmd.BrowseFor = DirectoryDialog.BrowseForTypes.FilesAndDirectories   
    frmd.Title = "Select a file or a folder"    
    If frmd.ShowDialog(Me) = DialogResult.OK Then   
        MsgBox(frmd.Selected)   
    End If   
End Sub
7
ответ дан 27 November 2019 в 22:43
поделиться

Все созданные в диалоговых окнах используют оболочку API, которые соответствуют их действию, PrintDialog, OpenFileDialog, SaveFileDialog, и т.д.

необходимо было бы, скорее всего, вручную создать эту функциональность.

1
ответ дан 27 November 2019 в 22:43
поделиться

AFAIK, нет ничего в платформе.NET, которая делает это из поля.

диалоговые окна файла.NET происходят от CommonDialog:

Наследованные классы требуются, чтобы реализовывать RunDialog путем вызова ShowDialog для создания определенного поля стандартного диалога. Наследованные классы могут переопределить HookProc для реализации определенной функциональности рычага диалогового окна.

1
ответ дан 27 November 2019 в 22:43
поделиться

Если требуется отобразить только определенные типы файлов, следующий , статья (с исходным кодом в C#) может помочь Вам:

http://www.codeproject.com/KB/shell/csdoesshell1.aspx?fid=14137&df=90&mpp=25&noise=3&sort=Position&view=Quick&fr=26

Это также объясняет другие опции, которые доступны для "настройки" диалогового окна FolderBrowser,

0
ответ дан 27 November 2019 в 22:43
поделиться

Вы можете использовать стандартный OpenFileDialog для выбора папки.

5
ответ дан 27 November 2019 в 22:43
поделиться