Eigenes Steuerelement hinzufügen
Wenn Sie einem Generic Dialog eigene Steuerelemente hinzuweisen wollen die Sie selbst programmiert haben gehen Sie bitte wie folgt vor.
Öffnen Sie den Formular Designer des Dialoges und fügen Sie dem Dialog einen "API Control" hinzu und merken Sie sich dessen Name z.B. "$APICONTROL1".
Im Formular Designer wird also vom Anwender die Position und Größe festgelegt.
Erzeugen Sie eine Klasse für ihr Steuerelement und leiten sie dieses von ApiControlPlugIn ab. In dieser Klasse können sie nun mit ctrl.ControlHost.Children.Add eigene beliebige Control hinzufuegen.
public class MyControl : ApiControlPlugIn
{
public ApiControlDuct(CTApiControl ctrl) : base(ctrl)
{
Button myButton = new Button():
ctrl.ControlHost.Children.Add(myButton);
}
}
Erzeugen Sie ein Dialog Plugin wie im vorigen Kapitel gezeigt.
Fügen Sie wenn nicht bereits vorhanden dem Dialog Plugin eine Überladung "Register" hinzu und registrieren Sie nun ihr Steuerelement
Beispiel:
public override void Register()
{
MyControl ctrl = this.RegisterApiControlEx("$APICONTROL1", typeof(MyControl)) as MyControl;
}
Controls direkt in eine Formular einfügen
Sie können Steuerelemente auch direkt in einen Dialog einfügen ohne den Form Designer zu verwenden.
Die hat den Nachteil das der Endanwender die Postion und Größe des Steuerelementes nicht beeinflussen kann. Sie sollten deswegen immer ein API Control vorziehen.
Beispiel:
using System;
using Mum.Geo.PlugIns;
using Mum.Geo.Client.Generic;
using Mum.Geo.Client.Events;
using XSystem;
namespace MySample1
{
[GenericFormPlugIn("*.BAUM")]
public class BaumDialog : GenericFormPlugIn
{
public BaumDialog(GenericForm genericForm) : base(genericForm)
{
Button meinButton = new Button();
//Der Erste Parameter ist das Register in das das UI Element eingefügt werden soll.
//Danach folgt optional die Position
this.GenericForm.AddUIElement(0, meinButton, 20, 20);
}
}
}
Mein Api Control hat eine TextBox mit einem Wert und ich will diesen Wert lesen
Beispiel API Control mit TextBox
public class MyControl : ApiControlPlugIn
{
public TextBox MyTextBox = new TextBox(); //TextBox als "public" deklarieren damit auf diese von aussen zugegriffen werden kann
public ApiControlDuct(CTApiControl ctrl) : base(ctrl)
{
ctrl.ControlHost.Children.Add(MyTextBox);
}
}
Initialiseren und lesen.
In diesem Beispiel wurde im Dialog eine Script Button mit dem Namen "$SCRIPTBUTTON1" hinzugefügt.
[GenericFormPlugIn("*.BAUM")]
public class BaumDialog : GenericFormPlugIn
{
private MyControl _myApiControl;
public BaumDialog(GenericForm genericForm) : base(genericForm)
{
}
public override async void Register()
{
//Api Control erzeugen und referenz auf diese zurückholen
_myApiControl = this.RegisterApiControlEx("$MY_CONTROL", typeof(MyControl)) as MyControl;
if (_myApiControl == null)
{
XLogger.Info("No ApiControl with the Name '$MY_CONTROL' found. You need to add a ApiControl with this Name to use the Function.");
}
//Script Button registrieren
this.RegisterScriptButton("$SCRIPTBUTTON1", this.Button1_Click);
}
private void Button1_Click()
{
//lesen des Inhalts der Textbox des API Controls
if (_myApiControl!= null)
{
string value = _myApiControl.MyTextBox.Text;
}
//oder so
MyControl ctrl = this.Form.Controls.GetApiControlPlugIn("$MY_CONTROL");
if (ctrl!= null)
{
string value = ctrl.MyTextBox.Text;
}
}
}