用 MQL 编写的用户界面图库 - 页 66

 

13.查询元素状态 _GET_STATE.

通常情况下,需要通过编程来获取界面中 一个或另一个元素的 状态。为了解决这个问题,我们创建了标识符_GET_STATE

//--------------------------------------------------------------------------------------------------------------------

*重要:请求_GET_STATE 时,函数将返回元素当前状态的索引

//--------------------------------------------------------------------------------------------------------------------

下图显示了元素状态列表。

1.状态标识符

(在下一版本 ,前缀 v_ 将被前缀 s_ 取代 2.


输出到日志中的索引:

  v_NEUTRAL_STATE           15
  //-----------------------------
  v_ACTIVATED_STATE         62
  //-----------------------------
  v_NEUTRAL_BLOCKED         64
  //-----------------------------
  v_ACTIVATED_BLOCKED       65   
  //----------------------------- 
  v_NEUTRAL_HIGHLIGHTED     66  
  //-----------------------------
  v_ACTIVATED_HIGHLIGHTED   67


让我们测试一下元素状态的查询和检索:

打开窗口,获取 "开始 "按钮的初始状态:


int _OnInit()
  {
   //------------------------------------------------
   //Open the window "Settings example 1".
   //------------------------------------------------
   w_6_Settings_example_1();
   //------------------------------------------------
   //Get state of button "Start":
   //------------------------------------------------
   int Button_state = w6_i_p1_BUTTON_Start(get_i,p1_GET_STATE);
   //------------------------------------------------
   //Print out:
   //------------------------------------------------
   Print("Button state:  ",Button_state);
   //------------------------------------------------


结果:得到与状态 v_NEUTRAL_STATE 对应的值 15



2.2. 记录按钮按下和松开时的状态:

为此

  • 在 API 文件中找到按钮。
  • 按下释放 两种情况编写_GET_STATE 请求。
case Settings_example_1___Start:

               //------------------------------------------------------------------------------------------------------
               //What to do when the button is pressed or released?
               //------------------------------------------------------------------------------------------------------
               switch((int)action)
               {
                //------------------------------------------------------------------------
                case pressed: 
                               {
                                //Get button's state when it pressed:
                                int Button_state =  w6_i_p1_BUTTON_Start(get_i,p1_GET_STATE);
                                
                                //Print out the result:
                                Print("Button state:  ",Button_state);
                               }
                break;
                //------------------------------------------------------------------------
                case released: 
                               {
                                //Get button's state when it released:
                                int Button_state =  w6_i_p1_BUTTON_Start(get_i,p1_GET_STATE);
                                
                                //Print out the result:
                                Print("Button state:  ",Button_state);
                               }
                break;
                //------------------------------------------------------------------------
               }
               //------------------------------------------------------------------------------------------------------
               //Your comment:
               //------------------------------------------------------------------------------------------------------
               break;


结果:在按下/释放事件中,当前的状态索引将被打印到日志中。

提醒

15 = v_NEUTRAL_STATE

62 = v_ACTIVATED_STATE

//----------------------------------------------------------------------------------------------------------------


3.让我们用复选框重复查询。



1.我们来获取复选框在窗口打开时的状态:

   //------------------------------------------------
   //Open the window "Settings example 1".
   //------------------------------------------------
   w_6_Settings_example_1();
   //------------------------------------------------
   
   //Get the state of the checkbox when it checked:
   int Checkbox_state = w6_i_p7_CHECKBOX_Set_an_option(get_i,p7_GET_STATE);
   
   //Print out the result:
   Print("Checkbox state:  ",Checkbox_state);
   //------------------------------------------------

结果:得到值 15,对应中性状态v_NEUTRAL_STATE(复选框所在位置)。




2.2. 接下来,我们来查询复选框在按下和释放事件中的状态。

为此

  • 在 API 文件中找到"设置选项"复选框
  • 针对选中 未选中 两种 情况编写_GET_STATE 查询。
case Settings_example_1___Set_an_option:
  
               //------------------------------------------------------------------------------------------------------
               //What to do when the checkbox is checked or unchecked? 
               //------------------------------------------------------------------------------------------------------
                case checked: 
                               {
                                //Get checkbox state when it checked:
                                int Checkbox_state = w6_i_p7_CHECKBOX_Set_an_option(get_i,p7_GET_STATE);
                                
                                //Print out the result:
                                Print("Checkbox state:  ",Checkbox_state);
                               }
                break;
                //------------------------------------------------------------------------
                case unchecked: 
                               {
                                //Get checkbox state when it unchecked:
                                int Checkbox_state = w6_i_p7_CHECKBOX_Set_an_option(get_i,p7_GET_STATE);
                                
                                //Print out the result:
                                Print("Checkbox state:  ",Checkbox_state);
                               }
                break;
               //------------------------------------------------------------------------------------------------------
               //Your comment:
               //------------------------------------------------------------------------------------------------------
               break;


结果:我们将得到值 66 v_NEUTRAL_HIGHLIGHTED 和 67 v_ACTIVATED_HIGHLIGHTED),高亮显示 中性状态和高亮显示 按下状态。

//-----------------------------------------------------------------------------------------------

本主题的第一部分到此结束。

在第二部分中,我们将返回D_LIST 下拉列表、H_SLIDER 滑块以及S_EDITEDIT 输入字段的状态。

 

13.状态请求 _GET_STATE。

第二部分:获取D_LIST、H_SLIDER、EDIT、S_EDIT 元素的状态

在上一部分中,我们了解了如何通过编程返回BUTTON 按钮和CHECKBOX 复选框的状态。我们使用了_GET_STATE 查询,并显示了函数返回的状态名称列表。一共有六个名称,每个名称都以前缀v_ 开头。(值的 缩写,将由s_ 代替--状态的 缩写

回顾一下状态索引:

  v_NEUTRAL_STATE           15
  //-----------------------------
  v_ACTIVATED_STATE         62
  //-----------------------------
  v_NEUTRAL_BLOCKED         64
  //-----------------------------
  v_ACTIVATED_BLOCKED       65   
  //----------------------------- 
  v_NEUTRAL_HIGHLIGHTED     66  
  //-----------------------------
  v_ACTIVATED_HIGHLIGHTED   67

在这种情况下,具体的索引号并不重要。当用户需要将一个特定的状态放入一个条件时,他会使用一个标识符

例 1:

//Getting state of the first element:
int Button_state = w6_i_p1_BUTTON_Start(get_i,p1_GET_STATE);

//Getting state of the second element:
int Checkbox_state = w6_i_p7_CHECKBOX_Set_an_option(get_i,p7_GET_STATE);


//Setting conditions for both elements when they're simultaneously ON:
if(Button_state == v_ACTIVATED_STATE)
  { 
   //Is the checkbox was already on:
    if(Checkbox_state == v_ACTIVATED_STATE)
      {
       Function_1();
      }
    //If the checkbox was the last pressed element and still highlighted:
    if(Checkbox_state == v_ACTIVATED_HIGHLIGHTED)
      {
       Function_2();
      }
  }


例 2:

//Getting state of the first element:
int Button_state = w6_i_p1_BUTTON_Start(get_i,p1_GET_STATE);

//Getting state of the second element:
int Checkbox_state = w6_i_p7_CHECKBOX_Set_an_option(get_i,p7_GET_STATE);


//Setting conditions for one element being ON, while the other is OFF:
if(Button_state == v_ACTIVATED_STATE)
  { 
   //If the checkbox was already off:
    if(Checkbox_state == v_NEUTRAL_STATE)
      {
       Function_A();
      }
    //If the checkbox was just turned off and still highlighted:
    if(Checkbox_state == v_NEUTRAL_HIGHLIGHTED)
      {
       Function_B();
      }
  }

//-----------------------------------------------------------------------------------------------------------------

*非常重要:

让我来解释一下v_NEUTRAL_STATEv_NEUTRAL_HIGHLIGHTED 状态之间 以及v_ACTIVATED_STATE 和 v_ACTIVATED_HIGHLIGHTED 之间 本质区别

v_NEUTRAL_STATE - это нейтральное состояние в котором элемент находится неопределенное время.

v_NEUTRAL_HIGHLIGHTED - это нейтральное состояние в которое элемент перешел ТОЛЬКО ЧТО, после отжатия пользователя. Поэтому элемент подсвечен - HIGHLIGHTED. 

同样适用于激活状态:

v_ACTIVATED_STATE - это активированное состояние в котором элемент находится неопределенное время.

v_ACTIVATED_HIGHLIGHTED - это активированное состояние в которое элемент перешел ТОЛЬКО ЧТО, после нажатия пользователя. Поэтому элемент подсвечен - HIGHLIGHTED. 

这种差异带来了很大的不同。

目前,按钮和其他一些元素只返回v_NEUTRAL_STATE v_ ACTIVATED _STATE,而 像复选框那样返回 HIGHLIGHTED 状态。这就意味着,用户无法知道项目是在刚才被点击/取消点击,还是在不确定的时间之前被点击/取消点击。不过,用户可以在 API 文件中捕捉到它们被按下的瞬间。是的,但这一功能在程序的其他部分还不可用。在下一个版本中,所有 互动元素 将加入高亮 状态返回。这样,用户 程序的任何地方都 能知道某个元素是按下/未被按下,还是已经处于该状态很长时间了。

//----------------------------------------------------------------------------------------------------------


下面进入实际操作部分:

  • 让我们打开两个带有 D_LIST、H_SLIDER、EDIT 和 S_EDIT 元素 窗口
  • 打开后立即返回元素的状态。

1. 打开窗口:

int _OnInit()
  {
   //------------------------------------------------
   //Open the windows "Settings example 1" and "Settings example 2".
   //------------------------------------------------
   w_6_Settings_example_1();
   w_7_Settings_example_2();
   //------------------------------------------------


2.获取元素的状态:

   //------------------------------------------------
   //Get the states of the elements S_EDIT, H_SLIDER, EDIT and D_LIST
   //------------------------------------------------
   //1. State index is type int, S_EDIT's function is double. Convert the types.
   int S_edit_state   = (int)w6_d_p5_S_EDIT_Spin_the_value(get_d,p5_GET_STATE); 
   
   //2. Getting the slider's state. 
   int H_slider_state =      w6_i_p3_H_SLIDER_Roll_the_value(get_i,p3_GET_STATE);
   
   //3.State index is type int, EDIT's function is string. Convert the types. 
   int Edit_state     = (int)w7_s_p4_EDIT_Comment_3(get_s,p4_GET_STATE);
   
   //State index is type int, D_LIST's function is string. Convert the types.
   int D_list_state   = (int)w7_s_p6_D_LIST_D_LIST_1(get_s,p6_GET_STATE);
   //------------------------------------------------
   
   //Print out the results:
   Print("S_edit_state   = ",S_edit_state);
   Print("H_slider_state = ",H_slider_state);
   Print("Edit_state     = ",Edit_state);
   Print("D_list_state   = ",D_list_state);
   //------------------------------------------------


结果: D_LISTcnome 的所有元素的 状态索引 都是 15(中性状态 v_NEUTRAL_STATE)。 D_LIST 返回错误 (-1)。


原因: 中心函数未指定返回该元素的状态 技术缺陷。将在下一版本中修正

由于D_LIST 函数 没有返回状态索引,因此我们将重点放在成功接收到状态的三个项目上 EDIT 、S_ EDIT 和 H_SLIDER

检查什么?

  • 当元素被锁定和点击时,函数返回哪些索引。
  • 给定元素是否具有HIGHLIGHTED)状态。换句话说,是否可以知道元素是否刚刚被点击。

我们刚刚验证了EDIT、S_EDIT 和 H_SLIDER 元素函数返回的是窗口打开时中性状态的索引。 剩下的就是检查其他状态。由于这些元素理论上只能处于中性锁定高亮 状态(不像按钮和复选框有更多状态),我们必须检查以下两种可能的状态:锁定高亮。另外还有一组"光标下"状态,为了避免混淆,我暂时还不想添加。在下一个版本中,我将创建一个特殊的前缀,用于打开每种元素可能状态的单独列表。这将使编程工作更加轻松。

我们将如何检查EDIT、S_EDIT 和 H_SLIDER 阻塞和高亮状态的返回:

  • 在 API 文件中找到 "设置选项 "复选框。
  • 将 EDIT、S_EDIT 和 H_SLIDER 元素的锁定/解锁写入复选框,并在其中打印()元素的状态。
  • 在 API 文件中 找到EDIT、S_EDIT 和 H_SLIDER 元素
  • 在这些元素中输入数值时,编写状态返回。
  • 让我们通过 Print() 打印得到的结果。
//-------------------------------------------------------------------------------------------------

1.在 API 文件中 找到"设置选项 " 复选框,并在其内 写入EDIT、S_EDIT 和 H_SLIDER 元素的锁定/解锁 状态。然后,通过 Print() 输出状态。

case Settings_example_1___Set_an_option:
  
            switch((int)action)
               {
               //------------------------------------------------------------------------------------------------------
               //What to do when the checkbox is checked or unchecked? 
               //------------------------------------------------------------------------------------------------------
                case checked: 
                               {
                                //-----------------------------------------------
                                //Locking EDIT:
                                w7_s_p4_EDIT_Comment_1(p4_LOCK);
                                
                                //Locking H_SLIDER:
                                w6_i_p3_H_SLIDER_Roll_the_value(p3_LOCK);
                                
                                //Locking S_EDIT:
                                w6_d_p5_S_EDIT_Spin_the_value(p5_LOCK); 
                                
                                //-----------------------------------------------
                                //Getting state of EDIT:
                                int EDIT_state =  (int)w7_s_p4_EDIT_Comment_1(get_s, p4_GET_STATE);

                                //Getting state of H_SLIDER:
                                int H_SLIDER_state = w6_i_p3_H_SLIDER_Roll_the_value(get_i,p3_GET_STATE); 

                                //Getting state of S_EDIT:
                                int S_EDIT_state = (int)w6_d_p5_S_EDIT_Spin_the_value(get_d, p5_GET_STATE); 
                                //-----------------------------------------------
                                
                                //Printing results:
                                Print("EDIT_state      = ",EDIT_state);
                                Print("H_SLIDER_state  = ",H_SLIDER_state);
                                Print("S_EDIT_state    = ",S_EDIT_state);
                                //-----------------------------------------------
                               }
                break;
                //------------------------------------------------------------------------
                case unchecked: 
                               {
                                //-----------------------------------------------
                                //Unlocking the element EDIT:
                                w7_s_p4_EDIT_Comment_1(p4_UNLOCK);
                                
                                //Unlocking H_SLIDER:
                                w6_i_p3_H_SLIDER_Roll_the_value(p3_UNLOCK);
                                
                                //Unlocking S_EDIT:
                                w6_d_p5_S_EDIT_Spin_the_value(p5_UNLOCK);
                                
                                //-----------------------------------------------
                                //Getting state of EDIT:
                                int EDIT_state =  (int)w7_s_p4_EDIT_Comment_1(get_s, p4_GET_STATE);

                                //Getting state of H_SLIDER:
                                int H_SLIDER_state = w6_i_p3_H_SLIDER_Roll_the_value(get_i,p3_GET_STATE); 

                                //Getting state of S_EDIT:
                                int S_EDIT_state = (int)w6_d_p5_S_EDIT_Spin_the_value(get_d, p5_GET_STATE); 
                                //-----------------------------------------------
                                
                                //Printing results:
                                Print("EDIT_state      = ",EDIT_state);
                                Print("H_SLIDER_state  = ",H_SLIDER_state);
                                Print("S_EDIT_state    = ",S_EDIT_state);
                                //-----------------------------------------------
                               }
                break;
               } 
               //------------------------------------------------------------------------------------------------------
               //Your comment:
               //------------------------------------------------------------------------------------------------------
               break;


结果:

  • 在点击复选框时,元素函数返回索引 64,对应于v_NEUTRAL_BLOCKED(中性锁定)状态。
  • 在取消选中复选框时,元素函数返回索引 15,对应状态v_NEUTRAL_STATE(中性状态)。

//--------------------------------------------------------------------------------------------------

 

2.第二项任务:

  • 查找 API 文件 中的 EDIT、S_EDIT、H_SLIDER 元素,并规定在输入值时获取状态,查看其函数是否返回HIGHLIGHTED)索引。

开始:

case Settings_example_2___Comment_1:
  
               //------------------------------------------------------------------------------------------------------
               //What to do when the text is entered?
               //------------------------------------------------------------------------------------------------------
               {
                //Getting state of EDIT:
                int EDIT_state =  (int)w7_s_p4_EDIT_Comment_1(get_s, p4_GET_STATE);
                                
                //Printing the results:
                Print("EDIT_state      = ",EDIT_state);
               } 
               //------------------------------------------------------------------------------------------------------
               //Your comment:
               //------------------------------------------------------------------------------------------------------
               break;
case Settings_example_1___Roll_the_value:
  
               //------------------------------------------------------------------------------------------------------
               //What to do when the slider's handle is moved?
               //------------------------------------------------------------------------------------------------------
               //Min value:  0  |   Max value:  100  |   V_step:  1  |   Default value:  75  |  Digits: Integer value
               //------------------------------------------------------------------------------------------------------
               {
                //Getting state of H_SLIDER:
                int H_SLIDER_state = w6_i_p3_H_SLIDER_Roll_the_value(get_i,p3_GET_STATE); 
                                
                //Printing results:
                Print("H_SLIDER_state  = ",H_SLIDER_state);
               }           
               //------------------------------------------------------------------------------------------------------
               //Your comment:
               //------------------------------------------------------------------------------------------------------
               break;
case Settings_example_1___Spin_the_value:
  
               //------------------------------------------------------------------------------------------------------
               //What to do when the value is set?
               //------------------------------------------------------------------------------------------------------
               //Min value:  NOT SET  |   Max value:  NOT SET  |   V_step:  1.7  |   Default value:  468.99  |  Digits: 3
               //------------------------------------------------------------------------------------------------------
               {
                //Getting state of S_EDIT:
                int S_EDIT_state = (int)w6_d_p5_S_EDIT_Spin_the_value(get_d, p5_GET_STATE); 
                                
                //Printing results:
                Print("S_EDIT_state    = ",S_EDIT_state); 
               }
               //------------------------------------------------------------------------------------------------------
               //Your comment:
               //------------------------------------------------------------------------------------------------------
               break;

结果:

  • EDIT:在用户交互事件中,返回状态索引 67,即v_ACTIVATED_HIGHLIGHTED 激活,高亮)。

  • S_EDIT:在用户交互事件中,返回状态索引 67,表示v_ACTIVATED_HIGHLIGHTED 已激活,高亮显示)。
  • H_SLIDER:在用户交互事件中,交替返回索引 66 和 67,分别表示v_NEUTRAL_HIGHLIGHTED 中性,点亮)和v_ACTIVATED_HIGHLIGHTED(激活,点亮)。Bug。在下一版本中进行修正。



//-----------------------------------------------------------------------------------------------------

结果:

总的来说,结果令人满意。各元素都能如期返回中性和锁定状态的索引。但也存在一些不足:

  • D_LIST 元素函数没有返回任何状态。
  • H_SLIDER 元素函数交替返回v_NEUTRAL_HIGHLIGHTED v_ACTIVATED_HIGHLIGHTED 状态的指数 而不是 一个指数 67 -v_ACTIVATED_HIGHLIGHTED(激活,发光)

结论:

  • 需要弥补不足。
  • 有必要创建一个用特殊前缀s_ 调用的智能提示列表 ,这样 用户就能知道哪些类型的元素具有哪些状态,并在代码中轻松使用它们。

我们有可能添加新的元素状态。例如,"中性指向""激活指向"( 在光标下为中性,在光标下为激活), 这有一个实用性和用户是否真正需要这些功能的问题。在没有收到此类要求之前,我不会添加新的状态。

本主题到此结束


请继续关注以下主题。

 

我最近一个星期都在研究如何使用WinForm编写界面并嵌入到MT5图表里。今天终于实现了。

 
上传视频比上传gif更简单,文件更小。
 

需要考虑的一般主题列表:

1. intellisense 列表中的方向和选择右侧窗口的功能。

2.以编程方式打开和关闭窗口 3.

3. 以编程方式打开可用窗口元素列表。

4. 打开单个元素属性列表

5.解析元素名称和窗口包装函数 6.

元素参数值返回 到其类型的变量中 7.

7.为不同类型的元素参数设置值

8.在不同元素参数之间返回、更改和转发值。考虑不同类型的元素和值,并测试不同窗口中不同类型元素之间的转发。

9.返回前一个值 (_V_LAST)。何时以及在何种情况下需要最后一个值(不要与当前值混淆)。

10.测试不同元素类型的ON、OFF、LOCK_ON、LOCK_OFF、LOCK、UNLOCK 状态的设置。

11. 测试元素值变化的绑定和同步性:如带有按钮和滑块的输入框。这样,当一个元素(手动或软件)的值发生变化时,第二个元素的值也会相应变化。

测试软件获取/设置滑块 和带按钮字段的范围边界(属性_V_MIN、_V_MAX、_V_STEP、_DIGITS)。

13.测试项目状态查询 (_GET_STATE) 的操作。

14.将文本和边框颜色与间隔值边界联系起来

15.API 文件中的方向

16.实现消息和警告窗口外观的简单程序逻辑。

//------------------------------------------

已考虑的主题以黄色标出。

目前还有一些问题有待考虑:

14.将文本和框架颜色与间隔值边界联系起来。

15.API 文件中的方向。

16.实现消息和警告窗口外观的简单程序逻辑。

//------------------------------------------

我建议将主题 14 与主题 16 联系起来。如果超出参数值的设定范围,首先会发出信号,改变部分元素(文本、底色、边框、条纹等)的颜色,然后打开对话窗口,最后打开警告窗口。同时,警告窗口会阻止对元素值的更改,直到用户手动关闭为止。


另外,我还想添加一个主题:

17. 当用户点击 "取消 "按钮时,取消已输入的设置。

很久以前,人们就开发了通过点击 "取消 "按钮 取消用户设置的技术,并在一定程度上进行了测试。目前,我们还不知道以前的功能能在多大程度上发挥作用。因此,有必要进行测试。


由于主题重叠,审查顺序如下:

14.实施交错参数边界保护:

  • 编写逻辑以控制预设边界内的设置,并创建警告系统。
  • 警告 1:用户会收到一个信号,即部分元素的颜色发生变化。(让我们将 文本、底座、框架和滑动条的颜色与数值边界联系起来)。
  • 警告 2:打开一个对话框,其中包含风险提示和返回原始设置的建议。(让我们测试一下在点击 "取消 " 按钮时恢复到先前设置的实际能力。)
  • 警告 3:打开一个警告窗口,阻止进一步更改设置并通知用户免责声明,要求用户手动确认。(让我们测试一下警告窗口出现时窗口的阻止情况)。


15.让我们详细看看新的 API 文件打印输出。

//----------------------------------------------------------------------------------------------------


接下来,我将收集所有发现的错误或缺陷,并为下一个版本列出任务清单。

在下一个包含修复和添加内容的版本发布后,我将把重点放在表格上,因为我认为表格是引擎进一步开发的主要方向之一。

Документация по MQL5: Основы языка / Операторы / Оператор возврата return
Документация по MQL5: Основы языка / Операторы / Оператор возврата return
  • www.mql5.com
Оператор return прекращает выполнение текущей функции и возвращает управление вызвавшей программе. Результат вычисления выражения возвращается...
 
hini #:

上周我一直在学习如何使用 WinForm 编写界面并将其构建到 MT5 图表中。今天,我终于找到了方法。


您将如何使界面与您的编程代码通信?

 
Реter Konow #:

如何在界面和程序代码之间建立联系?

还有几个问题:

  • 您可以在 MT5 图表中 "建立 "多少个表格(窗口)?
  • 如何将数据转化为表格?
  • 创建窗口时能否使用现成的模板?
  • 能否在 MT5 中创建自己的任务栏和上下文菜单?
  • 如何实现项目的软件返回/设置属性?通过定时器函数轮询 DLL?
请向我详细介绍您找到的解决方案。这非常有趣。:)
 

原则上,每个人都可以使用自己熟悉的工具。我对自己的界面很满意,这也是我开发它的原因。换句话说,我打算在自己的算法交易 中使用它。在论坛上发布解决方案会增加动力。如果我的界面对别人有用,那很好,如果没用,对我也没什么坏处。

在这个界面中,我看到了一个强大的工具,它与 MT5 的算法功能相结合,将使我能够扩大正确 交易的结果。是的,在这个漫长的过程中,我正在 "走向市场"。这需要数年时间,但无论如何,我都需要时间来开发智力。在市场上交易,光有钱没脑子是没有意义的,不是吗?

在我看来,决定使用 WinForms 或类似软件在本质上是不完整的。它导致从技术上脱离 MT5,建立一个独立的多窗口 Windows 应用程序。在第一阶段,它将像脐带一样通过数据通道连接到平台。用户将使用 DLL 轮询, 甚至可能 成功。如果需要,他还可以创建上下文菜单,并使用一些模板快速创建窗口.....。但最终......他将同时在两三个集成开发环境中工作,并使用不同的编程语言。那么,这样做有什么好处呢?更重要的是,它如何变得更简单

此外,有了多窗口 Windows 应用程序,用户可以直接将其连接到另一个交易平台的 API。因此,对他来说,这比通过计时器工作更容易。此外,还应提及市场。他的产品在那里是不被允许的。总之,各取所需。

 
Реter Konow #:

您将如何使界面与您的编程代码通信?

winform界面的任何控件点击后,都会有一个事件添加C#列表中,EA在定时器循环判断列表是否有事件发生。