【问题标题】:Assign UI control names dynamically during runtime在运行时动态分配 UI 控件名称
【发布时间】:2013-09-16 18:09:57
【问题描述】:

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

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

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

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

中的值是符号。

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

【问题讨论】:

  • 帖子 HERE(在 NI 网站上)解决了获取 ctrl 句柄的一般情况,简而言之,帖子说做不到。我对常规 ctrls 使用了运行时变量分配,从不用于制表符。 LabWindows/CVI 中的选项卡控件(正如您所发现的)位于选项卡面板句柄下的层。更重要的是,您不能在运行时“创建”在“UI”.h 文件中找到的串联 UI 引用。它们是在您保存 .uir 文件时创建的(不建议编辑)

标签: labwindows


【解决方案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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多