Control Addin mit Form?

28. September 2010 10:04

Hallo,

ist es möglich eine Form in ein Control Addin einzubauen?
Ich habe schon Addin Beispiele nachgebaut, bei denen Textfelder durch Bilder ersetzt werden, aber mein eigentliches Ziel ist, eine Windows Form im RTC anzuzeigen, ich dachte sowas wäre auch möglich mithilfe der Control Addins.
Hat jemand das schon mal probiert? Gibt es evtl ein Beispiel dafür?
Gruß
Tobias

edit:
Also ich habe schon einen kleinen Versuch gestartet, allerdings stürzt der RTC immer ab, wenn ich die entsprechnde Page öffne, auf der das Addin hinterlegt ist
Code:
Form TestForm;
        protected override System.Windows.Forms.Control CreateControl()
        {
            //hrow new NotImplementedException();

            TestForm = new Form();
            TestForm.Width = 200;
            TestForm.Height = 200;
            TestForm.HelpButton = true;
           
            return TestForm;
        }

Re: Control Addin mit Form?

28. September 2010 19:13

Hallo Tobias,

hast du schon einmal versucht, eine Form in die ControlCollection einer anderen Form zu hängen? Das schlägt mit einer ArgumentException fehl die auf den TopLevel Status der Form hinweist.

Was möchtest du mit dem Vorgehen erreichen? Ich denke, dass Container Controls für dein Vorhaben völlig ausreichend sind.

Re: Control Addin mit Form?

29. September 2010 14:09

Also erstmal zur Einleitung, meine Form hat ein paar Filter Felder und ein Datagridview (gefiltert und gefüttert wird über sql), ziel der Sache ist, eine Tabelle mit Bildern in jedem Feld, also jedes Feld hat einen Status und je nach Status ist das Feld in der Tabelle zB rot oder grün. Da ich mit Navision ja eine Tabelle nicht so gestalten kann wie ich es möchte, habe ich es über eine form gemacht, die ich dann wieder einbinden wollte, wenn ich das ganze natürlich über einen container machen könnte, wäre das auch ok. hast du einen tipp für mich wie das geht?

Re: Control Addin mit Form?

29. September 2010 14:20

Könnte dir vielleicht die Ampelfunktion weiter helfen?
Ich habe allerdings keine Ahnung, ob sich das (ohne Addins) in den RTC portieren lässt.

Re: Control Addin mit Form?

29. September 2010 16:30

Wenn ich es richtig verstanden habe kann man in Client Add-Ins keine WinForms benutzen. Man kann nur Formcontrols verwenden.
Was geht ist das man seine Textboxen, Buttons, etc. in z.B. ein Panel packt und dieses als Rückgabewert von CreatControl benutzt.

Re: Control Addin mit Form?

11. Oktober 2010 13:16

sorry hab mich zwischendurch etwas mit anderen Dingen beschäftigt,
aber die Ampel würde mir in diesem Fall nicht weiterhelfen.
Das mit dem Panel hört sich gut an, das heisst ich hätte meine Elemente statt in der Form in einem Panel gespeichert?
Hast du evtl. ein Beispiel für mich, wie man solch ein Panel programmiert?

Zu ContainerControls habe ich leider auch kein einfaches Beispiel gefunden was mir weiterhilft.

Re: Control Addin mit Form?

11. Oktober 2010 13:46

Ein Stück Beispielcode, ggf. die Objekte im MSDN prüfen. Hinweis: NumericTextBox ist eine eigene Klasse, abgeleitet von der TextBox, die aber numerische Werte unterstützt.

Code:
private TableLayoutPanel container;
private ComboBox comboBox;
private NumericTextBox textBoxOriginal;
private NumericTextBox textBoxConverted;

protected override Control CreateControl()
{
   container = new TableLayoutPanel();
   container.RowCount = 2;
   container.ColumnCount = 2;
   container.AutoSize = true;
   container.AutoSizeMode = AutoSizeMode.GrowAndShrink;
   container.BackColor = System.Drawing.Color.Azure;

   textBoxOriginal = new NumericTextBox();
   textBoxOriginal.Dock = DockStyle.Fill;
   textBoxOriginal.MaxLength = 20;
   textBoxOriginal.Leave += new EventHandler(textBoxOriginal_Leave);

   comboBox = new ComboBox();
   comboBox.Dock = DockStyle.Fill;
   comboBox.DropDownStyle = ComboBoxStyle.DropDownList;
   comboBox.SelectedIndexChanged += new EventHandler(comboBox_SelectedIndexChanged);

   textBoxConverted = new NumericTextBox();
   textBoxConverted.Dock = DockStyle.Fill;
   textBoxConverted.MaxLength = 12;
   textBoxConverted.ReadOnly = true;
   textBoxConverted.DoubleClick += new EventHandler(textBoxConverted_DoubleClick);

   container.Controls.Add(textBoxOriginal, 0, 0);
   container.SetColumnSpan(textBoxOriginal, 2);
   container.Controls.Add(comboBox, 0, 1);
   container.Controls.Add(textBoxConverted, 1, 1);

   return container;

}

Re: Control Addin mit Form?

12. Oktober 2010 23:38

Ich befürchte was ich machen will ist garnicht so möglich.
Ich habe vier comboBoxen die aufeinander aufbauen, und über SQL gefüllt werden, also die erste auswahl ist die where bedingung für die 2. comboBox usw...
wenn ich jetzt diese 4 Comboboxen einbinde, ist nur die erste gefüllt. ich fürchte das SQL (oder generell alle Funktionen im Code?) werden nur einmal beim Laden der Page ausgeführt?

gibt es evtl die Möglichkeit die Auswahl die ich machen möchte schon vorher in Navision zu machen, also treffen kann ich die Auswahl das ist nicht schwer, aber kann ich 4 Werte an ein Controll Addin übergeben, sollte es wirklich nicht gehen die Funktionen zu benutzen?

Re: Control Addin mit Form?

13. Oktober 2010 08:35

Wenn Dein Add-In von der Klasse StringControlAddInBase abgeleitet ist, dann kann NAV mit dem Add-In über einen String kommunizieren.
Werte übergibt man in dem man der Variable, die die SourceExpression des Feldes ist mit dem das Add-In verknüpft einen Wert zuweist.

Ein Beispiel dafür findet sich hier:

http://blogs.msdn.com/b/cabeln/archive/2009/10/14/add-ins-for-the-roletailored-client-of-dynamics-nav-2009-sp1-part2.aspx

Re: Control Addin mit Form?

14. Oktober 2010 12:49

Das Problem bei den Comboboxen war, dass man den Eventhandler noch von Hand hinzufügen musste, klar, dass ohne ausgelöstes Event die 2. Combobox auch nicht weiss, was die erste ausgewählt hat.

Das mit dem String brauche ich anscheinend doch nichtmehr

Vielen dank für die Hilfe!