Gå til innhold

Usercontrol design-time props. Hvordan velge fil?


Anbefalte innlegg

Noen som har lekt seg med avanserte properties for UserControls?

 

Det er lett å legge til enkle variabler som string, bool, enums osv, men hva gjør man om man ønsker å kunne legge til en fil? Enten ved å browse frem stien og la stien være verdien eller helst å få opp Resources boksen hvor man kan importere filen.

 

Jeg har behov for dette ifm en egen UserControl som skal være knyttet opp mot en XML.

 

Noen som har peiling?

Lenke til kommentar
Videoannonse
Annonse

Dette gjøres med Attributes, den du ser etter heter System.Windows.Forms.Design.FileNameEditor

 

jeg har brukt den i mitt program til å finne fram bilder, men for å beholde filnavnet (istedet for å bruke Image)

Eksempel:

class ImageFileEditor : System.Windows.Forms.Design.FileNameEditor
{
 protected override void InitializeDialog(System.Windows.Forms.OpenFileDialog openFileDialog)
 {
 	base.InitializeDialog(openFileDialog);
 	openFileDialog.Filter = "All supported formats|*.bmp;*.jpg;*.gif;*.png;*.wmf;*.emf|Windows Bitmap (*.bmp)|*.bmp|Joint Photographers Expert Group (*.jpg)|*.jpg|Graphics Interchange Format (*.gif)|*.gif|Portable Network Graphics (*.png)|*.png|Windows Metafile (*.wmf)|*.wmf|Enhanced Windows Metafile (*.emf)|*.emf|All files (*.*)|*.*";
 }
}

 

Og på egenskapen XMLFile (f.eks.) legger du til

[system.ComponentModel.Editor(typeof(XmlFileEditor), typeof(System.Drawing.Design.UITypeEditor))]

som en attribut, et voila!

Endret av GeirGrusom
Lenke til kommentar

Takker. Fant også noe annet for custom editor:

 

Usercontrollen med en property RectWidth

   public partial class MyUserControl : UserControl {
       int rectwidth = 0;
       [Description("Tada"), Editor(typeof(SelectXml), typeof(UITypeEditor))]
       public int RectWidth {
           get {
               return this.rectwidth;
           }
           set {
               if (value > 0) {
                   this.rectwidth = value;
                   this.Invalidate();
               }
           }
       }
   }

 

Støtteklassen for å lage en loddrett Trackbar når man trykker på property.

   public partial class SelectXml : System.Drawing.Design.UITypeEditor {
       public SelectXml() {
       }

       //Sørger for at det er en dropdown i properties menyen
       public override System.Drawing.Design.UITypeEditorEditStyle GetEditStyle(ITypeDescriptorContext context) {
           return UITypeEditorEditStyle.DropDown;
       }

 public override object EditValue(System.ComponentModel.ITypeDescriptorContext context, IServiceProvider provider, object value)
 {
 	//use IWindowsFormsEditorService object to display a control in the dropdown area
     IWindowsFormsEditorService frmsvr = (IWindowsFormsEditorService)provider.GetService(typeof(IWindowsFormsEditorService));
 	if(frmsvr == null)
   return null;
 	TrackBar tbr = new TrackBar();
 	tbr.Orientation = Orientation.Vertical;
 	tbr.Size = new Size(60,120);
 	tbr.TickFrequency = 50;
 	tbr.SetRange(10,300);
 	frmsvr.DropDownControl(tbr);
 	return tbr.Value;
 }
   }

Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...