iCAx开思工具箱

标题: 【求助】UG/UIStyler/Single Select List/item设置 [打印本页]

作者: darkhorse    时间: 2002-12-17 11:43
标题: 【求助】UG/UIStyler/Single Select List/item设置
在UIStyler中的Single Select List中subitem设置函数如下
  
char *temp_1="001";  char *temp_2="002";
UF_STYLER_item_value_type_t input_to_dialog_data_strct;
  
input_to_dialog_data_strct.value.strings[0]=temp_1;
input_to_dialog_data_strct.value.strings[1]=temp_2;
input_to_dialog_data_strct.item_attr=UF_STYLER_SUBITEM_VALUES;
input_to_dialog_data_strct.item_id=CHANGE_ID_LIST;//对应的ID,
input_to_dialog_data_strct.count=2;
  
  UF_STYLER_set_value(dialog_id,[$input_to_dialog_data_strct)]
  
出现错误,对话框从Menu中根本不出现,
请教原因
作者: zzz    时间: 2002-12-17 15:26
回去把c语言的书好好看一下。
作者: darkhorse    时间: 2002-12-17 16:06
呵呵见笑了,
我知道很大可能性是数据类型错误,
用了很多方法:
如下
sprintf(input_to_dialog_data_strct.value.strings[0],“%s”,"001");
strcpy(input_to_dialog_data_strct.value.strings[0],"001");
  
input_to_dialog_data_strct.value.strings[0]=“001”;
  
都不对,
在针对Option选项传递数据的时候spintf和strcpy都不可以,没办法测试=,
不可理解的是竟然可以了。
  
我的理解:input_to_dialog_data_strct.value.strings是char **;类型的,而
temp_1,temp_2是char * 类型的
input_to_dialog_data_strct.value.strings[0]=temp_1;
是指针和指针之间的赋值,到底到那里结束,由char *temp_1中的一个“\0”f符号来标志。
作者: wlzhao33    时间: 2002-12-17 16:39
input_to_dialog_data_strct.value.strings[0]=temp_1; 变成
input_to_dialog_data_strct.value.strings[0]=(char**)temp_1;试试,我在multi select list中是通过这样来实现的。
作者: darkhorse    时间: 2002-12-17 17:16
char temp[3][22]={"001","002","003"};
  
input_to_dialog_data_strct.value.strings[0]=(char *)temp[0];
input_to_dialog_data_strct.value.strings[1]=(char *)temp[1];
input_to_dialog_data_strct.value.strings[2]=(char *)temp[2]
处错,对话框出不来
如果:
  
char temp[3][22]={"001","002","003"};
  
input_to_dialog_data_strct.value.strings=(char **)temp;
则对话框可以出现,
但结果如下
temp[0]=001   
temp[1]=001   
temp[2]=001
input_to_dialog_data_strct.value.strings[0]=   
input_to_dialog_data_strct.value.strings[1]=(null)   
input_to_dialog_data_strct.value.strings[2]=(null)
  
请多多指教!
作者: wlzhao33    时间: 2002-12-18 09:25
char temp[3][22]={"001","002","003"};  
char *str[100];
int k;
for ( k=0;k<3;k++)
       str[k]=temp[k];
...........
input_to_dialog_data_strct.value.strings=(char **)str;
.........
这样试试看行不行。
作者: darkhorse    时间: 2002-12-18 10:11
呵呵~这样就可以一点了,测试赋值好像是可以了,不过对话框还是没有出现
  
temp[0]=001   
temp[1]=001   
temp[2]=001
  
E:\UGNXPART\MOLDWIZAARD\DLG\MWDlgTest\MWDlgTest.c
  line153
input_to_dialog_data_strct.value.strings=(char**)string
  returned a: 2283644
  
赋值可以
input_to_dialog_data_strct.value.strings[0]=001   
input_to_dialog_data_strct.value.strings[1]=002   
input_to_dialog_data_strct.value.strings[2]=003

  
E:\UGNXPART\MOLDWIZAARD\DLG\MWDlgTest\MWDlgTest.c
  line159
input_to_dialog_data_strct.item_attr=UF_STYLER_SUBITEM_VALUES
  returned a: 6
  
E:\UGNXPART\MOLDWIZAARD\DLG\MWDlgTest\MWDlgTest.c
  line160
input_to_dialog_data_strct.item_id=CHANGE_ID_LIST
  returned a: 214184036
  
E:\UGNXPART\MOLDWIZAARD\DLG\MWDlgTest\MWDlgTest.c
  line161
input_to_dialog_data_strct.count=3
  returned a: 3
  
E:\UGNXPART\MOLDWIZAARD\DLG\MWDlgTest\MWDlgTest.c
  line163开始出现错误
UF_STYLER_set_value(dialog_id,&input_to_dialog_data_strct)
  returned error:1560008
:  560008
:  560008
:  560008
:  560008
:  560

  
估计还是赋值的原因,老兄你的Multi Select的值是如何赋和取的?共享一下好吗?
谢谢。
作者: wlzhao33    时间: 2002-12-18 11:58
这样应该是可以的,你再仔细检查一下有没有其它原因。
我不知道你做的东西是不是要与数据库连接,如果这样的话,读取可能有点烦琐。
作者: darkhorse    时间: 2002-12-18 13:21
整个代码如下:
int CHANGE_apply_cb ( int dialog_id,
             void * client_data,
             UF_STYLER_item_value_type_p_t callback_data)
{
  char buf[133];
  char temp[3][22]={"001","002","003"};
  char *string[100];
  int i;
  UF_STYLER_item_value_type_t input_to_dialog_data_strct;
  
     if ( UF_initialize() != 0)  
          return ( UF_UI_CB_CONTINUE_DIALOG );
  
   
  UF_UI_open_listing_window();
  sprintf(buf,"temp[0]=%s   \ntemp[1]=%s   \ntemp[2]=%s\n",temp[0],temp[0],temp[0]);
  UF_UI_write_listing_window(buf);
  for(i=0;i<3;i++)
    string=temp;
  UF_CALL(input_to_dialog_data_strct.value.strings=(char**)string);
  
  sprintf(buf,"input_to_dialog_data_strct.value.strings[0]=%s   \ninput_to_dialog_data_strct.value.strings[1]=%s   \ninput_to_dialog_data_strct.value.strings[2]=%s\n",input_to_dialog_data_strct.value.strings[0],input_to_dialog_data_strct.value.strings[1],input_to_dialog_data_strct.value.strings[2]);
  UF_CALL(UF_UI_write_listing_window(buf));
  
  UF_CALL(input_to_dialog_data_strct.item_attr=UF_STYLER_SUBITEM_VALUES);
  UF_CALL(input_to_dialog_data_strct.item_id=CHANGE_ID_LIST);
  UF_CALL(input_to_dialog_data_strct.count=3);
  
    UF_CALL(UF_STYLER_set_value(dialog_id,[$input_to_dialog_data_strct))]
  
     UF_terminate ();
    return (UF_UI_CB_CONTINUE_DIALOG);  
  
}
作者: ycjwolf    时间: 2002-12-18 13:37
这两天没见,你又在瞎捣腾什么东西?我没有调试,但是给你两点建议:
  
1.
char* list[]={"001“,"002","003"};
...
input_to_dialog_data_strct.value.strings=list;
  
2.
  
对话框要放在application里面,并且application上一级文件夹路径在UG中注册过。
作者: darkhorse    时间: 2002-12-18 14:02
是呀,好长时间也没来了,忙得差不多了吧?
呵呵,错误找到了如下:
char buf[133];
。。。。。。。。。。。
sprintf(buf,"input_to_dialog_data_strct.value.strings[0]=%s   
\ninput_to_dialog_data_strct.value.strings[1]=%s   
  \ninput_to_dialog_data_strct.value.strings[2]=%s\n",
input_to_dialog_data_strct.value.strings[0],input_to_dialog_data_strct.value.strings
[1],input_to_dialog_data_strct.value.strings[2]);
UF_CALL(UF_UI_write_listing_window(buf));
就是多了这一句,在调试过程中这一句不显示错误,
让各位老兄费心了。。
作者: wlzhao33    时间: 2002-12-18 17:23
斑竹,请恕在下愚昧,我看了半天,也没看出这哪儿多了一句,难道是该把UF_CALL(UF_UI_write_listing_window(buf)); 变成UF_UI_write_listing_window(buf); 吗?
作者: darkhorse    时间: 2002-12-18 17:35
我估计是赋值错误
就是sprintf(buf,"strings[0]=%s,strings[0] );
这个地方错误,但用UF_UI_write_listing_window(buf); 查看,这个地方没发现什么错误,不过有他就不能运行,我也没看出什么错误来.
从一开始编程到现在,数据类型从头到尾的折磨我.
作者: spline    时间: 2003-3-6 21:15
各位知道如何设置参数把single select list 清空吗?只设置count 为0和input_to_dialog_data_strct.value.strings= 0 似乎不行,有错误返回。
作者: zzz    时间: 2003-3-6 21:40
spline wrote:
各位知道如何设置参数把single select list 清空吗?只设置count 为0和input_to_dialog_data_strct.value.strings= 0 似乎不行,有错误返回。

当然不行了,要用UF_STYLER_LIST_DELETE才行啊。
作者: 789zenghong    时间: 2011-9-12 14:17
:yan::yan:
学习中。。。。。。




欢迎光临 iCAx开思工具箱 (https://t.icax.org/) Powered by Discuz! X3.3