2009-12-07 4 views
2

J'ai un contrôle de grille de propriétés où je veux être en mesure d'afficher un SaveFileDialog que l'utilisateur est en train d'exporter des données dans un nouveau fichier. Je peux facilement raccorder un OpenFileDialog avec un FileNameEditor mais il ne semble pas y avoir de classe équivalente pour l'enregistrement des fichiers.Comment puis-je obtenir un PropertyGrid pour afficher un SaveFileDialog?

Existe-t-il une classe existante que je peux spécifier dans l'attribut System.ComponentModel.Editor de sorte qu'un SaveFileDialog s'affiche?

Répondre

4

donc l'objet que vous définissez dans le propertyGrid1.SelectedObject a besoin d'une propriété publique comme ce qui suit:

  private string _saveFile; 
    [BrowsableAttribute(true)] 
    [EditorAttribute(typeof(SaveFileNameEditor), typeof(System.Drawing.Design.UITypeEditor))] 
    public string SaveFileEditorVlad 
    { 
     get { return _saveFile; } 
     set { _saveFile = value; } 
    } 

afin de rendre le travail de réponse de Stewy :) Ensuite, lors de l'exécution, lorsque vous modifiez la propriété this, les points de suspension s'affichent et vous pouvez sélectionner un fichier à enregistrer sous.

0

Je ne pense pas qu'il y en ait. Vous devrez écrire votre propre éditeur dérivé de UITypeEditor. Cela ne devrait pas être si difficile.

6

Cela fonctionne très bien:

public class SaveFileNameEditor: UITypeEditor 
{ 
    public override UITypeEditorEditStyle GetEditStyle(ITypeDescriptorContext context) 
    { 
     return UITypeEditorEditStyle.Modal; 
    } 

    public override object EditValue(ITypeDescriptorContext context, IServiceProvider provider, object value) 
    { 
     if (context == null || context.Instance == null || provider == null) 
     { 
      return base.EditValue(context, provider, value); 
     } 

     using (SaveFileDialog saveFileDialog = new SaveFileDialog()) 
     { 
      if (value != null) 
      { 
       saveFileDialog.FileName = value.ToString(); 
      } 

      saveFileDialog.Title = context.PropertyDescriptor.DisplayName; 
      saveFileDialog.Filter = "All files (*.*)|*.*"; 
      if (saveFileDialog.ShowDialog() == DialogResult.OK) 
      { 
       value = saveFileDialog.FileName; 
      } 
     } 

     return value; 
    } 
} 
Questions connexes