przyciski w property grid

0

Witam,
Napisałem swojego property grida który może mieć własności typu int,string. Jednak chciałbym uzyskać coś takiego że jedna z właściwości jest przyciskiem oczywiście z możliwością obsługi zdarzenia on click. Czy ktoś z forumowiczów miał z tym tematem już jakąś styczność? Porady przykłady kodu mile widziane.

Pozdrawiam

0

Nie Wiem Czy dobrze zrozumiałem twoją Wypowiedź. Ale wydaje mi się, że żeby uzyskać taki efekt to musisz własną kontrolkę napisać (Dziedziczącą co najwyżej po Property Grid). Chyba że w jedno Pole tego property grid'a możesz wsadzić obiekt Button. i Operować na jego właściwościach

0

Tak zgadza się napisałem taką kontrolkę dziedziczącą po propertygrid tylko nie wiem właśnie jak się uporać z tymi przyciskami. Zdarzenia mógłbym sobie samemu dorobić z tym sądzę że również nie byłoby większego problemu tylko najgorsze jest to że nie mam pojęcia jak zrobić przycisk jako property. Nie interesują mnie właściwości przycisku jako samej jego klasy żeby je mieć i gdzieś trzymać itp po prostu chciałbym mieć przycisk. Np jak masz taki sam gdy kolekcje otwierasz czyli coś w stylu [...]

0

Hmmm... Te [...] i [v] W property gridzie to są chyba Typy pól.

Skoro masz własną kontrolkę to po prostu najłatwiej chyba event on click obsłużyć dla pola które ma być jak guzik i wygląd mu przeskalować.

Nie do końca rozumiem zwrot "zrobić przycisk jako property" :-) chcesz żeby Property of object był button? Bo z poprzedniej odpowiedzi wnioskowałem raczej że chciałeś aby Field był Clickable.

0
cat_black napisał(a)

Skoro masz własną kontrolkę to po prostu najłatwiej chyba event on click obsłużyć dla pola które ma być jak guzik i wygląd mu przeskalować.
.

Może niezbyt jasno się wyraziłem chciałbym właśnie żeby wygląd miał takiego guzika . Event faktycznie obsłużyć jest mniejszy problem ale z tym przeskalowaniem wyglądu itp jest problem a dokładniej nie mam pojęcia jak to zrobić.

0

Udało się :-) pojawił mi się przycisk [...] dodałem coś takiego:

public class ButtonModal : UITypeEditor
{
public override UITypeEditorEditStyle GetEditStyle(
ITypeDescriptorContext context)
{
return UITypeEditorEditStyle.Modal;
}
public override object EditValue(ITypeDescriptorContext context,
IServiceProvider provider, object value)
{
IWindowsFormsEditorService wfes = provider.GetService(
typeof(IWindowsFormsEditorService)) as
IWindowsFormsEditorService;

if (wfes != null)
{
MessageBox.Show("DD");
value = "dd";

}
return value;
}
}

[Editor(typeof(ButtonModal),typeof(System.Drawing.Design.UITypeEditor))]
public class btMW
{
}

Tylko niestety znalazłem inny problem. Ile razy będę dodawał taki przycisk na property grid tyle razy będzie on identyczny czyli za każdym razem będę miał messagebox i "dd". Zauważyłem że przy konwerterze stringów np takim:

[TypeConverter(typeof(StrList))]
public class ListStr
{
}

public class StrList : System.ComponentModel.StringConverter
{
private static List str;
public void SetList(List AList)
{
AList.Sort();
if (str == null)
str = new List();
else
str.Clear();
str = AList;
}
public override System.ComponentModel.TypeConverter.StandardValuesCollection GetStandardValues(ITypeDescriptorContext context)
{
return new StandardValuesCollection(str);
}

public override bool GetStandardValuesSupported(ITypeDescriptorContext context)
{
return true;
}

public override bool GetStandardValuesExclusive(ITypeDescriptorContext context)
{
return true;
}
}

Zawsze będę miał tą samą listę w property grid. A chciałbym mieć inne. Dodam że to co mi się marzy to, że wszystkie property buduję dynamicznie i np. Jeżeli chcę dodać property z combo to robię to mniej więcej tak:

StrList d = new StrList();
d.SetList(strList);
CustomProperty myProp = new CustomProperty(sName, Value, typeof(ListStr), false, true, bCategory);
myProperties.Add(myProp);

Niestety jeżeli wypełniam odpalam coś takiego dla 3 różnych listy mam wszędzie(3 property) z tą samą ostatnią listę. Nie jestem aż tak biegły w C# ale czy dałoby się zrobić to tak żeby konvertery typów były przypisane do jednego property a nie do całego bez implementacji oddzielnie dla każdego property. A może jakieś inne rozwiązanie.

1 użytkowników online, w tym zalogowanych: 0, gości: 1