在运行时动态分配UI控件名称

时间:2013-09-16 18:09:58

标签: labwindows

我有一台同时接收客户端连接的服务器。我主要使用NI提供的MultiClientServer示例作为模型来实现使用多线程的服务器。 我有多达4个客户端连接,每个客户端发送有关其内部变量的信息。我的目标是根据哪个客户端发送它在不同的选项卡中显示这些数据。 我有一个数组,用于保存每个tab元素的句柄

static int ClientTABHandle[4] = {0,0,0,0};  

当客户端连接并报告其ID时,ID用于在调用SetCtrlVal时引用正确的ClientTABHandle。例如,

SetCtrlVal(boardTABHandle[clientInfoPtr->clientID],<control name>, <value>);

&lt;&gt;中的值是符号的。

现在,这让我在运行时使用正确的TAB句柄,具体取决于我正在处理的客户端,但我找不到动态引用的方法。由于UI控件位于单独的选项卡中,因此每个控件都有一个TAB名称的前缀。例如,如果TAB被称为TABPANEL1,TABPANEL2,TABPANEL3和TABPANEL 4,则第一个TAB上的UI元素将被称为TABPANEL1_CONTROLNAME。 但是如何在运行时创建一个引用控件的字符串并在SetCtrlVal命令中使用它?我不喜欢使用Fmt,因为它会降低速度,而且,我不知道如何使用可以评估控件名称的字符串。

1 个答案:

答案 0 :(得分:1)

您的问题 how can I make a string at runtime that refers to a control and use that in the SetCtrlVal command?
如果您的方法允许您 以编程方式创建 以后需要SetCtrlValSetCtrlAttribute的控件,那么答案可能是尝试使用 NewCtrl(,,,) function 。它将允许您在选项卡面板上创建控件,它将为它创建的每个控件返回一个唯一的句柄(ControlID)。所有信息都在链接中,但这是它的原型:

int NewCtrl (int Panel_Handle, int Control_Style, char Control_Label[], int control_Top, int Control_Left);

使用NewCtrl的示例代码可在此处找到:
C:\ Program Files(x86)\ National Instruments \ CVIxxxx \ samples \ userint \ buildui.cws
C:\ Program Files(x86)\ National Instruments \ CVIxxxx \ samples \ userint \ ICOViewer.cws