DialogForm C# keine Buttons

Hallo,

ich versuche einen Dialog zu erstellen, wo der Anwender eine Jahreszahl eingeben kann. Dabei habe ich mich an das Beispiel aus dem SDK Handbuch gehalten. Leider werden keine Buttons angezeigt.

Mein Code:

            String jahr;
            DialogForm eingabejahr = cRM.DialogForm;
            eingabejahr.DialogTitle = "Datumseingabe";

            eingabejahr.DefineVariableStart();
            eingabejahr.DefineVariable("Jahr", 0, "C", 4, 0, "2024");

            eingabejahr.DefineFctStart();
            eingabejahr.DefineFct("OK", "Bestätigen", true, false, 1);
            eingabejahr.BindFctHandler("OK", ButtonOK);

            eingabejahr.DLIPath = @"%PRJDIR%\jahr.dli";
            eingabejahr.Sizable = true;
            eingabejahr.SizeToContent = true;
            eingabejahr.WidthInPixel = 640;
            eingabejahr.HeightInPixel = 480;
            eingabejahr.Show();
            object contents = null;
            eingabejahr.GetVariableContentsVariant("Jahr", ref contents);
            jahr = Convert.ToString(contents);

Was mache ich denn nur falsch?

Viele Grüße

Thomas

Wenn Sie die Dialog-Form dargestellt bekommen, dann drücken Sie einmal blind Strg+J, darüber gelangen Sie in den Eingabemaskendesigner, in welchem Sie die „jahr.dli“ überhaupt erst gestalten können. Ansonsten wird eine Default-Ansicht dargestellt, die sieht so aus, wie in Ihrem Shot, daher gehe ich davon aus, dass Sie die Eingabemaske eben noch gar nicht gestaltet haben, sondern mit dem Default arbeiten.

In dem Eingabemaskendesigner sollte dann links unter „Schaltflächen“ die „OK“-Schaltfläche angeboten werden, diese platzieren Sie dorthin, wo Sie sie hinhaben möchten. Fertig.

Den BindFctHandler-Aufruf brauchen Sie für Ihren Zweck nicht, wenn der Button einfach nur den Dialog schließen soll.

Perfekt! Vielen Dank! Super Sache die Dialog-Form.

Jetzt habe ich alle Buttons. Den Schritt hatte ich nicht gemacht. Das Problem, welches jetzt entsteht ist, dass die Variablen nicht ordentlich eingelesen werden. Das contents Objekt bleibt seltsamerweise null.

Fehlermeldung:

Im Beispiel vom SDK bekomme ich die gleiche Fehlermeldung. Das Einlesen des Wertes soll ja nach dem Drücken auf „OK“ geschehen. Da verstehe ich den Ablauf noch nicht. Gibt es irgendwo weitere Beispiele?

Kommt der Fehler auch, wenn Sie etwas in das Feld eintragen?

Bei mir funktioniert

public static void Main() 
{ 
 long OK = 1; 
 long CANCEL = 2; 
 long ABORT = 3; 
 long RETRY = 4; 
 long IGNORE = 5; 
 long YES = 6; 
 long NO = 7; 
 
 DialogForm dlgObj = cRM.DialogForm; 
 dlgObj.DialogTitle = "DialogForm"; 
 
 dlgObj.DefineVariableStart(); 
 dlgObj.DefineVariable("Var1", 0, "C", 20, 0, ""); 
 dlgObj.DefineVariable("Var2", 0, "N", 20, 3, ""); 
 
 dlgObj.DefineFctStart(); 
 dlgObj.DefineFct("OK", "Bestätigen", true, false, OK); 
 dlgObj.DefineFct("Abbrechen", "Beenden", true, false, CANCEL); 
   
 dlgObj.DLIPath = @"%PRJDIR%\Test.dli"; 
 dlgObj.Sizable = true; 
 dlgObj.SizeToContent = false; 
 dlgObj.WidthInPixel = 640; 
 dlgObj.HeightInPixel = 480; 
 dlgObj.Show(); 
 
 object contents = null; 
 dlgObj.GetVariableContentsVariant("Var2", ref contents); 
 cRM.DialogMessageBox("Var2: " + contents.ToString(), cRM.AppTitle, 0); 
 dlgObj.GetVariableContentsVariant("Var1", ref contents); 
 cRM.DialogMessageBox("Var1: " + contents.ToString(), cRM.AppTitle, 0); 
}

tadellos:
image
image
image

Leider ja. Ich habe Ihren Quellcode 1:1 kopiert und das Skript aus Combit heraus gestartet. Buttons eingefügt, Zahlen eingegeben und auf „OK“ gedrückt. Es kommt der gleiche Fehler wie zuvor.

contents bleibt weiterhin null. Wir benutzen die Combit Version 12.004 Professional. Unsere IDE ist Visual Studio 2022 und im Skript ist folgender Inhalt:

// <!--#include ref="System.Windows.Forms"-->
// <!--#include using="System.Windows.Forms"-->

#region Visual Studio only
using System.Windows.Forms;
using combit.cRM.COM;
using System;

namespace CombitProvisionsabrechnung
{
    class program
    {
        static cRMApplication cRM = new cRMApplication(EApplicationStartType.GetActiveobject);
        #endregion Visual Studio only
        //-------------------------------------------------------------------------------------------------------
        //>> C# Script Code ab hier:

        public static void Main()
        {
            long OK = 1;
            long CANCEL = 2;
            long ABORT = 3;
            long RETRY = 4;
            long IGNORE = 5;
            long YES = 6;
            long NO = 7;

            DialogForm dlgObj = cRM.DialogForm;
            dlgObj.DialogTitle = "DialogForm";

            dlgObj.DefineVariableStart();
            dlgObj.DefineVariable("Var1", 0, "C", 20, 0, "");
            dlgObj.DefineVariable("Var2", 0, "N", 20, 3, "");

            dlgObj.DefineFctStart();
            dlgObj.DefineFct("OK", "Bestätigen", true, false, OK);
            dlgObj.DefineFct("Abbrechen", "Beenden", true, false, CANCEL);

            dlgObj.DLIPath = @"%PRJDIR%\Test.dli";
            dlgObj.Sizable = true;
            dlgObj.SizeToContent = false;
            dlgObj.WidthInPixel = 640;
            dlgObj.HeightInPixel = 480;
            dlgObj.Show();

            object contents = null;
            dlgObj.GetVariableContentsVariant("Var2", ref contents);
            cRM.DialogMessageBox("Var2: " + contents.ToString(), cRM.AppTitle, 0);
            dlgObj.GetVariableContentsVariant("Var1", ref contents);
            cRM.DialogMessageBox("Var1: " + contents.ToString(), cRM.AppTitle, 0);
        }
        //<< C# Script Code bis hier
        //-------------------------------------------------------------------------------------------------------
        #region Visual Studio only
    }
}
#endregion Visual Studio only

Ich bin ratlos…

Das ist ja seltsam. Packen Sie den Teil zwischen
//>> C# Script Code ab hier:
bis
//<< C# Script Code bis hier
bitte mal in eine „Test.csscript“ Datei und wählen in irgendeiner beliebigen Ansicht ‚Start > Aktionen > Scripte & Workflows > Script ausführen‘ und wählen diese „Test.csscript“-Datei aus. Geht das dort? (So hab ich es getestet.)

Müssen wir dann über den Support eingrenzen, können Sie einen Case machen?

Leider kommt derselbe Fehler.

Ich kann einen Case aufmachen. Was soll ich reinschreiben?

Thema „cRM.DialogForm: Probleme bei GetVariableContentsVariant in C#-Scripting“

Und dann beziehen Sie sich auf die URL zu diesem Beitrag.

Nach dem neuesten Update funktioniert alles. Super hilfreich die Möglichkeit mit DialogForm zu arbeiten!