How to improve the GUI

mauede

Well-known member
Joined
Sep 1, 2021
Messages
103
Location
Northwood - UK
Programming Experience
Beginner
GUI.PNG


Thank you for all the help you have given me.
I added a couple of new features upon requests from my colleagues.
It does what it is supposed to do. However, it looks ugly.
I tried to make it more compact but WPF but I couldn't. For some reason, that I don't get, if I move horizontally one of the ListBoxes then other untouched controls move
as well. I moved to the right the two bottom buttons ("Cancel", "Commit") and the above ListBoxes moved too. Eventually, the 5th one got out of the window.

What are the best techniques to resize/move some controls on the window without disrupting the whole GUI?
In the attached picture I am showing what I could achieve partially by editing the XAML file and partially by editing the controls through the more, directly on the window.
I watched some videos posted by professionals that made building a GUI look so easy. But it was not easy for me just to produce something that does not look good at all.
What am I missing?
I am attaching my XAML file.
Thank you so much
XML:
<Window x:Class="WPFUI.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:local="clr-namespace:WPFUI"
        mc:Ignorable="d" FontSize="20"
        Title="RT Structure Renaming" Height="900" Width="1704" Background="#FFE3EECD">
    <Grid>
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="10"/>
            <ColumnDefinition Width="auto"/>
            <ColumnDefinition Width="auto"/>
            <ColumnDefinition Width="auto"/>
            <ColumnDefinition Width="auto"/>
            <ColumnDefinition Width="auto"/>
            <ColumnDefinition Width="auto"/>
            <ColumnDefinition Width="auto"/>
            <ColumnDefinition Width="auto"/>
            <ColumnDefinition Width="auto"/>
            <ColumnDefinition Width="auto"/>
            <ColumnDefinition Width="auto"/>
            <ColumnDefinition Width="auto"/>
            <ColumnDefinition Width="auto"/>
            <ColumnDefinition Width="auto"/>
            <ColumnDefinition Width="auto"/>
            <ColumnDefinition Width="auto"/>
            <ColumnDefinition Width="auto"/>
            <ColumnDefinition Width="auto"/>
            <ColumnDefinition Width="auto"/>
            <ColumnDefinition Width="auto"/>
            <ColumnDefinition Width="auto"/>
            <ColumnDefinition Width="auto" />
            <ColumnDefinition Width="auto"/>
            <ColumnDefinition Width="auto"/>
            <ColumnDefinition Width="auto"/>
            <ColumnDefinition Width="auto"/>
            <ColumnDefinition Width="auto"/>
            <ColumnDefinition Width="auto"/>
            <ColumnDefinition Width="auto"/>
            <ColumnDefinition Width="auto"/>
            <ColumnDefinition Width="auto"/>
            <ColumnDefinition Width="auto"/>
            <ColumnDefinition Width="auto"/>
            <ColumnDefinition Width="auto"/>
            <ColumnDefinition Width="auto"/>
            <ColumnDefinition Width="auto"/>
            <ColumnDefinition Width="auto"/>
            <ColumnDefinition Width="auto"/>
            <ColumnDefinition Width="auto"/>
            <ColumnDefinition Width="auto"/>
            <ColumnDefinition Width="auto"/>
            <ColumnDefinition Width="auto"/>
            <ColumnDefinition Width="auto"/>
            <ColumnDefinition Width="auto"/>
            <ColumnDefinition Width="auto"/>
            <ColumnDefinition Width="auto"/>
            <ColumnDefinition Width="auto"/>
            <ColumnDefinition Width="auto"/>
            <ColumnDefinition Width="auto"/>
            <ColumnDefinition Width="auto"/>
            <ColumnDefinition Width="auto"/>
            <ColumnDefinition Width="auto"/>
            <ColumnDefinition Width="auto"/>
            <ColumnDefinition Width="auto"/>
            <ColumnDefinition Width="auto"/>
            <ColumnDefinition Width="auto"/>
            <ColumnDefinition Width="auto"/>
            <ColumnDefinition Width="auto" />
            <ColumnDefinition Width="auto"/>
            <ColumnDefinition Width="auto"/>
            <ColumnDefinition Width="auto"/>
            <ColumnDefinition Width="auto"/>
            <ColumnDefinition Width="auto"/>
            <ColumnDefinition Width="auto"/>
            <ColumnDefinition Width="auto"/>
            <ColumnDefinition Width="auto"/>
            <ColumnDefinition Width="auto"/>
            <ColumnDefinition Width="auto"/>
            <ColumnDefinition Width="auto"/>
            <ColumnDefinition Width="auto"/>
            <ColumnDefinition Width="auto"/>
            <ColumnDefinition Width="auto"/>
            <ColumnDefinition Width="auto"/>
            <ColumnDefinition Width="auto"/>
            <ColumnDefinition Width="auto"/>
            <ColumnDefinition Width="auto"/>
            <ColumnDefinition Width="auto"/>
            <ColumnDefinition Width="auto"/>
            <ColumnDefinition Width="auto"/>
            <ColumnDefinition Width="auto"/>
            <ColumnDefinition Width="auto"/>
            <ColumnDefinition Width="auto"/>
            <ColumnDefinition Width="auto"/>
            <ColumnDefinition Width="auto"/>
            <ColumnDefinition Width="auto"/>
            <ColumnDefinition Width="auto"/>
            <ColumnDefinition Width="auto"/>
            <ColumnDefinition Width="auto"/>
            <ColumnDefinition Width="auto"/>
            <ColumnDefinition Width="auto"/>
            <ColumnDefinition Width="auto"/>
            <ColumnDefinition Width="auto"/>
            <ColumnDefinition Width="auto"/>
            <ColumnDefinition Width="auto"/>
            <ColumnDefinition Width="auto"/>
            <ColumnDefinition Width="auto"/>
            <ColumnDefinition Width="auto"/>
            <ColumnDefinition Width="auto"/>
            <ColumnDefinition Width="auto"/>
            <ColumnDefinition Width="auto" />
            <ColumnDefinition Width="auto"/>
            <ColumnDefinition Width="auto"/>
            <ColumnDefinition Width="auto"/>
            <ColumnDefinition Width="auto"/>
            <ColumnDefinition Width="auto"/>
            <ColumnDefinition Width="auto"/>
            <ColumnDefinition Width="auto"/>
            <ColumnDefinition Width="auto"/>
            <ColumnDefinition Width="auto"/>
            <ColumnDefinition Width="auto"/>
            <ColumnDefinition Width="auto"/>
            <ColumnDefinition Width="auto"/>
            <ColumnDefinition Width="auto"/>
            <ColumnDefinition Width="auto"/>
            <ColumnDefinition Width="auto"/>
            <ColumnDefinition Width="auto"/>
            <ColumnDefinition Width="auto"/>
            <ColumnDefinition Width="auto"/>
            <ColumnDefinition Width="auto"/>
            <ColumnDefinition Width="auto"/>
            <ColumnDefinition Width="auto"/>
            <ColumnDefinition Width="auto"/>
            <ColumnDefinition Width="auto"/>
            <ColumnDefinition Width="auto"/>
            <ColumnDefinition Width="auto"/>
            <ColumnDefinition Width="auto"/>
            <ColumnDefinition Width="auto"/>
            <ColumnDefinition Width="auto"/>
            <ColumnDefinition Width="auto"/>
            <ColumnDefinition Width="auto"/>
            <ColumnDefinition Width="auto"/>
            <ColumnDefinition Width="auto"/>
            <ColumnDefinition Width="auto"/>
            <ColumnDefinition Width="auto"/>
            <ColumnDefinition Width="auto"/>
            <ColumnDefinition Width="*"/>
        </Grid.ColumnDefinitions>
        <Grid.RowDefinitions>
            <RowDefinition Height="10"/>
            <RowDefinition Height="auto"/>
            <RowDefinition Height="auto"/>
            <RowDefinition Height="auto"/>
            <RowDefinition Height="auto"/>
            <RowDefinition Height="auto"/>
            <RowDefinition Height="auto"/>
            <RowDefinition Height="auto"/>
            <RowDefinition Height="auto"/>
            <RowDefinition Height="auto"/>
            <RowDefinition Height="auto"/>
            <RowDefinition Height="auto"/>
            <RowDefinition Height="*"/>
            <RowDefinition Height="*"/>
            <RowDefinition Height="*"/>
            <RowDefinition Height="10"/>
        </Grid.RowDefinitions>

        <Label x:Name="TrialName" Grid.Row="1"   Height=" 50" VerticalAlignment="Top"   Content=" Trial Name" FontFamily="Arial Black" FontWeight="Bold" FontSize="20"
                    Grid.ColumnSpan="2" Margin="0,10,0,0" HorizontalAlignment="Left" Width="146" />

        <TextBox x:Name="Trial" Grid.Column="1" MinWidth="80" Height="40" VerticalAlignment="Top"  FontFamily="Arial Black" FontSize="20"
                       TextChanged="Trial_TextChanged" Text="" DataContextChanged="Trial_DataContextChanged" Margin="124,10,151,0"  Grid.Row="1" Grid.ColumnSpan="21" />

        <Button x:Name="SearchDB"  Grid.Row="1"  Height="45" Content= "Protocol Structures" HorizontalAlignment="Center" VerticalAlignment="Top"  FontFamily="Arial Black"
                     FontSize="20" Margin="0,55,0,0" Click="SearchDB_Click"  Grid.RowSpan="2"  Grid.Column="1" Width="220" Background="Gold"  />


        <Label  x:Name="PatientID" Grid.Column="21" Content="Patient Id" Margin="100,6,2,0" VerticalAlignment="Top" FontFamily="Arial Black" FontWeight="Bold" FontSize="20" Height="50" Grid.Row="1" />

        <TextBox  x:Name="Patient"  Grid.Column="22" Grid.Row="1" MinWidth="100" Text="{Binding PatientName, Mode=OneWay}" FontFamily="Arial Black" FontSize="20"
                       Margin="10,12,0,0"  VerticalAlignment="Top" Height="38" TextChanged="Patient_TextChanged" HorizontalAlignment="Left" Width="260" Grid.ColumnSpan="15"  />

        <Button x:Name="PatientScan" Grid.Column="20"  Grid.Row="1" Content="Load CTs and RT Structures" HorizontalAlignment="Right"
                  Margin="0,55,10,0" FontFamily="Arial Black" FontSize="20" Grid.ColumnSpan="3"   Click="PatientScan_Click" Grid.RowSpan="2" Width="312"    />
        <Separator/>
        <ComboBox x:Name="VDB" Grid.Row="6" Grid.Column="21"  MinWidth="100"   Height="60"  Grid.ColumnSpan="2"
                  ItemsSource="{Binding Path=velocityDB, Mode=OneWay}" SelectedItem="VelocityDB"
                  Background="Orchid" Margin="100,5,0,5" HorizontalAlignment="Left" Width="200" SelectionChanged="VDB_SelectionChanged" >
            <ComboBox.ItemTemplate>
                <DataTemplate>
                    <Grid>
                        <Grid.ColumnDefinitions>
                            <ColumnDefinition Width="Auto"/>
                            <ColumnDefinition Width="*"/>
                        </Grid.ColumnDefinitions>
                        <TextBlock  x:Name="VDB" Text="{Binding MyVelocityDB}" Grid.Column="0" Padding="10,5" HorizontalAlignment="Center" FontFamily="Arial Black" FontSize="22" />
                    </Grid>
                </DataTemplate>
            </ComboBox.ItemTemplate>
        </ComboBox>
        
        <Label Grid.Column="1" Content="Velocity Database" HorizontalAlignment="Left" Margin="63,0,0,0" Grid.Row="6" VerticalAlignment="Center" Width="239"
               Grid.ColumnSpan="21"  FontFamily="Arial Black" FontWeight="Bold" FontSize="22" Height="40"  Background="OldLace" />


        <Button x:Name="Cancel" Grid.Column="23"  Grid.Row="6"  Height="66" Content=" Cancel" HorizontalAlignment="Left"  Background="Red"
            Margin="113,10,0,0"  VerticalAlignment="Top" FontFamily="Arial Black" FontSize="20" Width="139" Click="Cancel_Click"  />

        <Button x:Name="Confirm" Grid.Column="23"  Grid.Row="6"  Height="66" Content=" Commit" HorizontalAlignment="Left"  Background="Blue"
            Margin="308,10,0,0"  VerticalAlignment="Top" FontFamily="Arial Black" FontSize="20" Width="117"  Click="Accept_Click" Grid.ColumnSpan="3" />

        <Label Grid.Column="23" Content="Patient Structures" HorizontalAlignment="Left" Margin="52,60,0,0" Grid.Row="1" VerticalAlignment="Top"
                     FontFamily="Arial Black" FontWeight="Bold" FontSize="22" Height="40" Grid.RowSpan="2" Width="233" />

        <Label Grid.Column="24" Content="Auto Renamed Structures" HorizontalAlignment="Left" Margin="32,60,0,0" Grid.Row="1" VerticalAlignment="Top"  Grid.ColumnSpan="113"
                     FontFamily="Arial Black" FontWeight="Bold" FontSize="22" Height="40" Grid.RowSpan="2" Width="324" />

        <Button x:Name="AutoMatchedStruct" Grid.Column="23" Content="Load Auto-Matched Structures" HorizontalAlignment="Left" Margin="181,12,0,0" Grid.Row="1" VerticalAlignment="Top" Height="43" Width="456"
                     Grid.ColumnSpan="7" FontFamily="Arial Black" FontSize="20"  Background="Wheat" Click="AutoMatchedStruct_Click"   />

        <ListBox x:Name="ProtocolStructures" Grid.Column="1" Grid.Row="5" d:ItemsSource="{d:SampleData}"  ScrollViewer.VerticalScrollBarVisibility="Visible"   ScrollViewer.CanContentScroll="True"
                       Margin="0,20,0,40" HorizontalAlignment="Left" Width="210" Height="600"  Background="LawnGreen"  />

        <ListBox x:Name="CTnames" Grid.Column="21" Grid.Row="5"  d:ItemsSource="{d:SampleData}"  ScrollViewer.VerticalScrollBarVisibility="Visible" ScrollViewer.CanContentScroll="True"   Margin="10,20,0,40"
                        SelectionMode="Single"  SelectionChanged="CTnames_SelectionChanged" HorizontalAlignment="Left" Width="187"  Height="600"  Background="SandyBrown" />

        <ListBox x:Name="StructSets" Grid.Column="22" Grid.Row="5"  d:ItemsSource="{d:SampleData}"  ScrollViewer.VerticalScrollBarVisibility="Visible" ScrollViewer.CanContentScroll="True"
                        Margin="0,15,26,45" SelectionMode="Single" HorizontalAlignment="Right" Width="200"  SelectionChanged="StructSets_SelectionChanged"  Height="600"  Background="PaleGoldenrod"   />

        <ListBox x:Name="VelStructures" Grid.Column="23" Grid.Row="5"  d:ItemsSource="{d:SampleData}"  ScrollViewer.VerticalScrollBarVisibility="Visible" ScrollViewer.CanContentScroll="True"
                 Margin="0,14,39,46" Height="600" SelectionMode="Single" Background="Yellow" RenderTransformOrigin="0.5,0.5" HorizontalAlignment="Right" Width="233" >
            <ListBox.RenderTransform>
                <TransformGroup>
                    <ScaleTransform/>
                    <SkewTransform AngleY="0.851"/>
                    <RotateTransform/>
                    <TranslateTransform Y="1.485"/>
                </TransformGroup>
            </ListBox.RenderTransform>
            <ListBox.ItemTemplate>
                <DataTemplate>
                    <Grid>
                        <Grid.ColumnDefinitions>
                            <ColumnDefinition Width="Auto"/>
                            <ColumnDefinition Width="*"/>
                        </Grid.ColumnDefinitions>
                        <TextBlock Name="TextNum" Text="{Binding Num, Mode=OneWay}"  Grid.Column="0" Padding="1,5" HorizontalAlignment="Stretch"    />
                        <TextBox Text="{Binding  Name, Mode=OneWay}"  Grid.Column="1" HorizontalAlignment="Stretch" IsReadOnly="True"  />
                    </Grid>
                </DataTemplate>
            </ListBox.ItemTemplate>
        </ListBox>

        <ListBox x:Name="EditableStructs" Grid.Row="5" Grid.Column="25" Margin="10,20,0,40"  SelectionMode="Single"  Grid.ColumnSpan="3" Background="PowderBlue"
                           ScrollViewer.VerticalScrollBarVisibility="Visible" ScrollViewer.CanContentScroll="True"  ItemsSource="{Binding AutoNames,Mode=TwoWay}" Height="600" HorizontalAlignment="Left" Width="229"  >
            <ListBox.ItemTemplate>
                <DataTemplate>
                    <Grid>
                        <Grid.ColumnDefinitions>
                            <ColumnDefinition Width="Auto"/>
                            <ColumnDefinition Width="Auto"/>
                            <ColumnDefinition Width="*"/>
                        </Grid.ColumnDefinitions>
                        <TextBlock Name="TextInd" Text="{Binding NamInd, Mode=OneWay}"  Grid.Column="0" Padding="1,5" HorizontalAlignment="Stretch"/>
                        <CheckBox IsChecked="{Binding IsAccepted, Mode=TwoWay}" Grid.Column="1"  Padding="5,5" VerticalAlignment="Center" HorizontalAlignment="Center"  />
                        <TextBox Text="{Binding  StrName, Mode=TwoWay}"  Grid.Column="2" HorizontalAlignment="Stretch"/>
                    </Grid>
                </DataTemplate>
            </ListBox.ItemTemplate>
        </ListBox>
      
    </Grid>
</Window>
 
Last edited:
Pick just 3 colors. Pick only 2 fonts. Take advantage of grids.
Well, I used the colours to see where I was placing the single control.
What worries me most is the underlying spatial relationship among the various controls.
Why does moving a control causes some other ones to move as well?
I do use a grid with rows and columns. Probably misused it.
Sometimes just moving a control to the next column causes it to shift out of the canvas
and moves other controls as well.
 
You have 136 columns on that XAML but visually it looks like you should only 5 or 6 if you follow the grid design/layout principles.
 
Anyway, since we are not domain experts, you'll need to explain to us the following:
1) What is the primary use of the UI? (e.g. what problem are you trying to solve?)
2) Is there any secondary uses for the UI? (ex. It makes it easier to browse through the data)
3) What are the controls on the UI?
4) What purpose does each control server?
5) What is the typical flow of operations that the user would do with the controls? What are they trying to achieve within those steps?
6) Are there exceptional actions that must absolutely be done to prevent the user from shooting themselves in the foot?
7) Do you have any accessibility compliance requirements? (ex. Section 508 in the US, Equality Act of 2010 in the UK, some of your users are color blind, some of your users use a screen reader due to vision impairment, some of your users can only use a keyboard -- no mouse)

An example of things to cover in question #5 is like that issue you ran into in one of your other threads where you wanted to clear the list boxes when the patient id was cleared out. What exactly is the sequence of operations that the user takes and what is the intended result?
 
You have 136 columns on that XAML but visually it looks like you should only 5 or 6 if you follow the grid design/layout principles.

Anyway, since we are not domain experts, you'll need to explain to us the following:
1) What is the primary use of the UI? (e.g. what problem are you trying to solve?)
2) Is there any secondary uses for the UI? (ex. It makes it easier to browse through the data)
3) What are the controls on the UI?
4) What purpose does each control server?
5) What is the typical flow of operations that the user would do with the controls? What are they trying to achieve within those steps?
6) Are there exceptional actions that must absolutely be done to prevent the user from shooting themselves in the foot?
7) Do you have any accessibility compliance requirements? (ex. Section 508 in the US, Equality Act of 2010 in the UK, some of your users are color blind, some of your users use a screen reader due to vision impairment, some of your users can only use a keyboard -- no mouse)

An example of things to cover in question #5 is like that issue you ran into in one of your other threads where you wanted to clear the list boxes when the patient id was cleared out. What exactly is the sequence of operations that the user takes and what is the intended result?
I will respond comprehensively in two days because I have to prepare my talk for an IPEM conference taking place in London. Thank you
 
Anyway, since we are not domain experts, you'll need to explain to us the following:
1) What is the primary use of the UI? (e.g. what problem are you trying to solve?)
2) Is there any secondary uses for the UI? (ex. It makes it easier to browse through the data)
3) What are the controls on the UI?
4) What purpose does each control server?
5) What is the typical flow of operations that the user would do with the controls? What are they trying to achieve within those steps?
6) Are there exceptional actions that must absolutely be done to prevent the user from shooting themselves in the foot?
7) Do you have any accessibility compliance requirements? (ex. Section 508 in the US, Equality Act of 2010 in the UK, some of your users are color blind, some of your users use a screen reader due to vision impairment, some of your users can only use a keyboard -- no mouse)

An example of things to cover in question #5 is like that issue you ran into in one of your other threads where you wanted to clear the list boxes when the patient id was cleared out. What exactly is the sequence of operations that the user takes and what is the intended result?
I will try to answer your questions to the best of my knowledge.
First off, RTTQA is an international organization that performs Quality Assessment of Radiotherapy Clinical Trials.
Radiotherapy is moving towards the standardization of structure names, treatment plans, and protocols.
In a nutshell:
an RT structure is defined as a portion of a body organ that receives a predetermined radiation dose during treatment. The Oncologist contours (delineates) the structure called CTV (Clinical Target Volume) on the CT scan. The CTV volume has to receive at least 95% of the prescribed radiation dose. The technologist or the dosimetrist contours all the Organ-At-Risk structures that depend on the tumor site. The planner adds other "dummy" structures to make the Treatment Planning Optimizer generate the best possible deliverable treatment plan.
A structure-set is the set of structures defined on a plan, delineated on the same CT scan. The patient radiation dose will be distributed according to the structure set.

1) The UI is aimed at helping the people working in RTTQA at renaming the RT structures according to the trial protocol. At the moment, they receive many plans from various institutes/hospitals participating in the trial. They rename the structures of each plan manually, which takes a long time. The application compares the structure names fetched from an external database (PostgreSQL) with the structure names fetched from the Velocity database and guesses the new names leaving a space where no guess is reasonable. The user can review the guessed names against the protocol names (from PostgreSQL) and the plan names (from Velocity). He/she can accept/discard/edit every guessed structure name. He/she can decide which structure names will be stored back in the Velocity database.

2) This task of this application is only helping at renaming the RT structures of treatment plans devised by various healthcare institutes.

3) The UI has:

  • a Label and a ComboBox for the selection of the Velocity database
  • a Label, a TextBox, and a Button to load the structure names (from PostgreSQL) as defined in the trial protocol.
  • a ListBox to show the structure names fetched from PostgreSQL (trial protocol)
  • a Label, a TextBox, and a Button to enter the patient identifier which will also connect to the selected Velocity database, and load the CT scans for the patient
  • a ListBox showing the names of the CT scans
  • a ListBox showing the names of the structure-sets associated with the selected CT scan
  • a ListBox showing the numbered names of the structures in the selected structure-set (fetched from Velocity database).
  • a Button to load the guessed structure names
  • a ListBox showing the numbered guessed structure names with CheckBoxes
  • a Button to sort the application
  • a Button to confirm the selected renamed and/or edited structures to be saved in a new structure set in the connected Velocity database
I am attaching the sort of users' guide. It should explain the task of each control.

4) Please, see the description at point 3) and the attached documentation

5) the canonical steps flow would be:
  1. Enter the trial name and load the protocol structure names
  2. select the Velocity database
  3. enter the patient identifier and load the patient CT scans
  4. select a CT scan from the list
  5. select a structure set from the list
  6. load the automatically renamed structures
  7. review /edit / accept renamed structures in the list
  8. commit the remaining process
  9. repeat steps 1. - 8. with another patient and /or another trial or leave the application
At any time the user can decide to abort the application. nothing will be saved to the connected Velocit database after the previous commit if any.

6) This application is not supposed to be foolproof. The designated users are supposed to know what they are doing

7) No accessibility compliance.

There will be requests/suggestions from the users. If you develop s/w for hospitals staff you must forget specifications. You'll never get any specification from them. You must deploy something that works and show it to them. Only then they will tell you what they like/dislike, what they need/ don't need, what is useful/useless. That's the way it is here... sigh!

I have already received a request. One of the users asked me to add a progress bar or an hourglass to show that the application is not hanging while it is trying to reconnect to the chosen Velocity database. As shown in the attached document, when the user picks a structure set from the list the application is systematically logged out of Velocity. I swear no log-out statement is performed. However, that happens systematically for some reason to me unknown. The workaround is to remember the user's previous choices,
reconnect to the selected Velocity database, and go from there.
I placed break-points where I clean up the loaded data and log out of Velocity. I swear no such statement is reached when the application gets logged out. I sent a question to Varian Velocity about such weird behavior.
I will ask you how to implement the progress bar or similar feature to entertain the user while reconnecting to the database.

Please, feel free to ask me further questions and/or clarifications.

Thank you very much for all your attention and help.
 

Attachments

  • Automatic_Renaming.pdf
    479.8 KB · Views: 61
Last edited:

Latest posts

Back
Top Bottom