2.12.2  Okna budowane w treści skryptu

 

W treści skryptu można także skonstruować programowo okno dialogowe. Można zbudować okno dowolnie skomplikowane, jednakże ta technika sprawdza się dla okien niezbyt dużych.

W poniższym przykładzie tworzone jest okno złożone z dwóch tekstowych pól edycyjnych oraz dwóch przycisków.

C#

using System;
using
 System.Windows.Forms;
using
 Askom.AsixEvo.Scripting;
 

public
 class FormBuilder : IScript
{
   Form entryForm;
   TextBox xPos, yPos;
 
   
public bool Initialize(string[] aParameters, IApplication aApplication)
   {
 
      IVariable varX, varY;
 
      varX = aApplication.GetVariable(aParameters[0], 
true);
      varY = aApplication.GetVariable(aParameters[1], 
true);
 
      CreateForm();
 
      xPos.Text = varX.VariableState.FormattedValue;
      yPos.Text = varY.VariableState.FormattedValue;
      DialogResult res = entryForm.ShowDialog();
      
if (res == DialogResult.OK)
      {
         
Int32 newX, newY;
         
if (Int32.TryParse(xPos.Text, out newX) && Int32.TryParse(yPos.Text, out newY))
         {
            varX.SetVariableValue(newX);
            varY.SetVariableValue(newY);
         }
         
else
            MessageBox.Show(
"Niepoprawne wartości");
      }
 
      varX.Dispose();
      varX.Dispose();
      
return true;
   }
 
   
public void FinalizeScript()
   {
   }
 
   
void CreateForm()
   {
      Label label1 = 
new Label();
      label1.AutoSize = 
true;
      label1.Location = 
new System.Drawing.Point(24, 29);
      label1.Size = 
new System.Drawing.Size(54, 13);
      label1.Text = 
"Pozycja X";
 
      xPos = 
new TextBox();
      xPos.Location = 
new System.Drawing.Point(97, 26);
      xPos.Size = 
new System.Drawing.Size(132, 20);
 
      Label label2 = 
new Label();
      label2.AutoSize = 
true;
      label2.Location = 
new System.Drawing.Point(24, 68);
      label2.Size = 
new System.Drawing.Size(54, 13);
      label2.Text = 
"Pozycja Y";
 
      yPos = 
new System.Windows.Forms.TextBox();
      yPos.Location = 
new System.Drawing.Point(97, 65);
      yPos.Size = 
new System.Drawing.Size(132, 20);
 
      Button buttonOk = 
new Button();
      buttonOk.DialogResult = DialogResult.OK;
      buttonOk.Location = 
new System.Drawing.Point(280, 20);
      buttonOk.Size = 
new System.Drawing.Size(142, 30);
      buttonOk.Text = 
"&OK";
      buttonOk.UseVisualStyleBackColor = 
true;
 
      Button buttonCancel = 
new Button();
      buttonCancel.DialogResult = DialogResult.Cancel;
      buttonCancel.Location = 
new System.Drawing.Point(280, 59);
      buttonCancel.Size = 
new System.Drawing.Size(142, 30);
      buttonCancel.Text = 
"&Anuluj";
      buttonCancel.UseVisualStyleBackColor = 
true;
 
      entryForm = 
new Form();
      entryForm.AutoScaleDimensions = 
new System.Drawing.SizeF(6F, 13F);
      entryForm.AutoScaleMode = AutoScaleMode.Font;
      entryForm.CancelButton = buttonCancel;
      entryForm.ClientSize = 
new System.Drawing.Size(466, 103);
      entryForm.Controls.Add(buttonCancel);
      entryForm.Controls.Add(buttonOk);
      entryForm.Controls.Add(yPos);
      entryForm.Controls.Add(label2);
      entryForm.Controls.Add(xPos);
      entryForm.Controls.Add(label1);
      entryForm.FormBorderStyle = FormBorderStyle.FixedSingle;
      entryForm.MaximizeBox = 
false;
      entryForm.MinimizeBox = 
false;
      entryForm.StartPosition = FormStartPosition.CenterScreen;
      entryForm.Text = 
"Koordynaty";
      entryForm.TopMost = 
true;
   }

 

VB

Imports System
Imports
 System.Windows.Forms
Imports
 Askom.AsixEvo.Scripting
 

Public
 Class FormBuilderVB
    
Implements IScript
 
    
Dim entryForm As Form
    
Dim xPos, yPos As TextBox
 
    
Public Function Initialize(ByVal aParameters() As StringByVal aApplication As _

                                     IApplication) As Boolean Implements IScript.Initialize
 
        Dim varX, varY As IVariable
 
        varX = aApplication.GetVariable(aParameters(0), True)
        varY = aApplication.GetVariable(aParameters(1), True)
 
        CreateForm()
 
        xPos.Text = varX.VariableState.FormattedValue
        yPos.Text = varY.VariableState.FormattedValue
        If (entryForm.ShowDialog() = DialogResult.OK) Then
 
            Dim newX, newY As Int32
            If (Int32.TryParse(xPos.Text, newX) And Int32.TryParse(yPos.Text, newY)) Then
                varX.SetVariableValue(newX)
                varY.SetVariableValue(newY)
            Else
                MessageBox.Show("Niepoprawne wartości")
            End If
 
        End If
 
        varX.Dispose()
        varX.Dispose()
 
        Return True
 
    End Function
 
    Public Sub FinalizeScript() Implements IScript.FinalizeScript
 
    End Sub
 
    Sub CreateForm()
 
        Dim label1 As Label
        label1 = New Label()
        label1.AutoSize = True
        label1.Location = New System.Drawing.Point(24, 29)
        label1.Size = New System.Drawing.Size(54, 13)
        label1.Text = "Pozycja X"
 
        xPos = New TextBox()
        xPos.Location = New System.Drawing.Point(97, 26)
        xPos.Size = New System.Drawing.Size(132, 20)
 
        Dim label2 As Label
        label2 = New Label()
        label2.AutoSize = True
        label2.Location = New System.Drawing.Point(24, 68)
        label2.Size = New System.Drawing.Size(54, 13)
        label2.Text = "Pozycja Y"
 
        yPos = New System.Windows.Forms.TextBox()
        yPos.Location = New System.Drawing.Point(97, 65)
        yPos.Size = New System.Drawing.Size(132, 20)
 
        Dim buttonOk As Button
        buttonOk = New Button()
        buttonOk.DialogResult = DialogResult.OK
        buttonOk.Location = New System.Drawing.Point(280, 20)
        buttonOk.Size = New System.Drawing.Size(142, 30)
        buttonOk.Text = "&OK"
        buttonOk.UseVisualStyleBackColor = True
 
        Dim buttonCancel As Button
        buttonCancel = New Button()
        buttonCancel.DialogResult = DialogResult.Cancel
        buttonCancel.Location = New System.Drawing.Point(280, 59)
        buttonCancel.Size = New System.Drawing.Size(142, 30)
        buttonCancel.Text = "&Anuluj"
        buttonCancel.UseVisualStyleBackColor = True
 
        entryForm = New Form()
        entryForm.AutoScaleDimensions = New System.Drawing.SizeF(6.0F, 13.0F)
        entryForm.AutoScaleMode = AutoScaleMode.Font
        entryForm.CancelButton = buttonCancel
        entryForm.ClientSize = New System.Drawing.Size(466, 103)
        entryForm.Controls.Add(buttonCancel)
        entryForm.Controls.Add(buttonOk)
        entryForm.Controls.Add(yPos)
        entryForm.Controls.Add(label2)
        entryForm.Controls.Add(xPos)
        entryForm.Controls.Add(label1)
        entryForm.FormBorderStyle = FormBorderStyle.FixedSingle
        entryForm.MaximizeBox = False
        entryForm.MinimizeBox = False
        entryForm.StartPosition = FormStartPosition.CenterScreen
        entryForm.Text = "Koordynaty"
        entryForm.TopMost = True
 
    End Sub
  
End
 Class 

 

Funkcja CreateForm  tworzy programowo obiekt okienka dialogowego. Przed otwarciem okienka, pola edycyjne ustawiane są zgodnie z aktualnymi wartościami zmiennych przekazanych w parametrach wywołania skryptu. Następnie okienko jest otwierane w trybie dialogowym przy pomocy metody ShowDialog obiektu okienka. Powrót do kodu skryptu następuje po zamknięciu okienka. Jeżeli zostało zamknięte klawiszem OK, to wykonywana jest próba konwersji wprowadzonych wartości na  liczby typu całkowitego i wysłanie nowych wartości do zmiennych procesowych.