Ktokolwiek tworzył edytory kontrolek w Windows Forms, wie że jest to droga przez mękę. Jednak to co go czeka w Compact Framework można tylko nazwać drogą przez piekło
O ile w standardowych Form-sach designer może być zawarty w bibliotece kontrolki w CF jest to niewykonalne. Wynika to z błahej przyczyny – braku implementacji edytorów w bibliotekach CF. A więc jak to zrobić?
Tworzenie edytora dla określonej kontrolki musimy zacząć od stworzenia Windows Class Library:
Kolejnym krokiem jest dodanie referencji do System.Design abyśmy uzyskali dostęp do base-owych edytorów:
W tak przygotowaną bibliotekę możemy dodać naszą klasę edytora. W naszym przykładzie stworzymy klasę edytora dla kontrolki ToolBar:
internal class ToolBarDesigner : ControlDesigner
{
public ToolBarDesigner()
{
}
}
Zadaniem tego designera będzie powiązanie buttonów dziedziczących po klasie Component z naszym ToolBar-em. Powiązanie to jest wymagane przy wykonywaniu przenoszenia / kopiowania ToolBar-a z jednego form-a na drugi. Zrealizujemy je przez przeciążenie właściwości AssociatedComponents ControlDesigner-a:
public override ICollection AssociatedComponents
{
get
{
ToolBar control = this.Control as ToolBar;
if (control != null)
{
return control.Buttons;
}
return base.AssociatedComponents;
}
}
Następnym krokiem jest powiązanie naszego designera z konkretną kontrolką. Aby to uzyskać musimy wskazać naszemu ToolBar-owi jakiego edytora ma używać. Jednak nie możemy tego wykonać przez bezpośrednie wskazanie klasy a przez referencję do biblioteki.
Na początek podpisujemy bibliotekę kluczem:
W kolejnym kroku musimy ją zarejestrować w Global Assembly Cache. Aby sobie ułatwić zadanie możemy rejestrowanie dodać do zdarzeń po kompilacji:
“C:Program FilesMicrosoft Visual Studio 8SDKv2.0Bingacutil.exe” /u “$(TargetName)”
“C:Program FilesMicrosoft Visual Studio 8SDKv2.0Bingacutil.exe” /i “$(TargetPath)”
Pierwsza linijka wyrejestrowuje bibliotekę a druga rejestruje.
Ostatnim krokiem powiązania jest wskazanie w pliku Design-Time Attribute klasy (o tych plikach pisałem w tym artykule), która ma być użyta jako edytor:
<?xml version="1.0" encoding="utf-16"?> <Classes xmlns="http://schemas.microsoft.com/VisualStudio/2004/03/SmartDevices/XMTA.xsd"> <Class Name="Cubicsoft.WindowsMobile.Controls.ToolBar"> <Designer> <Type>Cubicsoft.WindowsMobile.Controls.Design.ToolBarDesigner, Cubicsoft.WindowsMobile.Controls.Design, Version=1.0.0.0, Culture=neutral, PublicKeyToken=c223de6bc083912b</Type> <BaseType></BaseType> </Designer> </Class> </Classes> </xml>
W wyniku otrzymujemy funkcjonalność przenoszenia powiązanych komponentów między form-ami.








Leave a Reply