怎么给dotnetbar控件名加变量

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了怎么给dotnetbar控件名加变量相关的知识,希望对你有一定的参考价值。

用了ContextMenuBar,它下面的按钮类型是ButtonItem。我现在想用这些按钮的名字
for (int j = 0; j < qx.Length; j++)

ButtonItem pic = (ButtonItem)Controls["buttonItem" + j];
pic.Enabled = false;

这样写不行(要是windows自己的控件就可以这么写,dotnetbar不行)有没有大神知道怎么写啊。

  dotnetbar中所有允许自己下挂容器的控件都自己维护一个Items属性,里面是它的子控件的集合。
  查找子控件可以使用myContextMenuBar.GetItem(xxx),或者直接myContextMenuBar.Items["xxx"]。

  
参考技术A 不知道你想干啥 没看懂

MFC中给控件添加变量,DoDataExchange中

DoDataExchange函数其实是一项数据动态绑定技术。比如你在写动态按钮过程中须对按钮添加变量时,怎么添加?控件类已经写好了,其变量是已经固定的。你要添加新的变量就要用到DoDataExchange函数。

你要在对话框的构造函数里面初始化一个变量,再用DoDataExchange函数将它绑定到你的动态按扭中,比如:DDX_Check(pDX, IDC_CHECK1, m_Lesson1);这就是将m_Lesson1(这是一个外部变量,其定义在对话框的构造函数里)绑定到IDC_CHECK1中。
 
看下DDX_Check函数原型:void AFXAPI DDX_Check(CDataExchange* pDX, int nIDC, int& value);
可以看到m_Lesson并不是真的添加到IDC_CHECK1控件里了,注意这是int& value,只是一个值引用而已。
差不多的意思就是这个变量被框架传递给控件了。控件只负责使用此变量 ,而不负责改写此变量。
 
值得注意的一点是:MSDN后面附加了一句 Never call this function directly. It is called by the UpdateData member function. Call UpdateData to initialize a dialog box’s controls or retrieve data from a dialog box.就是说此函数永远不被直接调用,它只是呼叫UpdateData函数时才会被调用。

 

 
UpdateData函数
内部调用了DoDataExchange。该函数只有一个布尔型参数,它决定了数据传送的方向。
调用UpdateData(TRUE)将数据从对话框的控件中传送到对应的数据成员中,调用UpdateData(FALSE)则将数据从数据成员中传送给对应的控件。
 
UpdateData(false)是将变量的值传到控件,表示对话框正在初始化.
UpdateData(TRUE)是从控件中取值到关联的变量, 表示数据正在获取
CWnd::DoDataExchange
 
 
时间: 2016年7月

调用由框架交换和验证对话框数据。

语法
 
      virtual void DoDataExchange(
   CDataExchange* pDX 
);
参数
 
 
pDX

为 CDataExchange 对象的指针。

备注
 

不要直接调用此函数。 它由 UpdateData 成员函数调用。 调用 UpdateData 初始化对话框的控件或对话框中检索数据。

当从 CDialog派生时应用程序特定的对话框选件类,则需要重写该成员函数,如果您希望使用结构的自动数据交换和验证。 添加变量向导将编写该成员函数的重写版本包含预期“数据映射”对话框的数据交换(ddx),并验证(DDV)全局函数调用。

自动生成此成员函数的重写版本,请对话框编辑器首先创建对话框资源,然后派生应用程序特定的对话框选件类。 然后使用添加变量向导关联变量、数据和验证大小与在新的对话框的各种控件。 向导然后将被重写的 DoDataExchange,包含数据映射。 下面是示例DDX/DDV代码块生成由添加变量向导:

 
void CPenWidthsDlg::DoDataExchange(CDataExchange* pDX)
{
   CDialog::DoDataExchange(pDX);
   DDX_Text(pDX, IDC_THINPENWIDTH, m_nThinWidth);
	DDV_MinMaxInt(pDX, m_nThinWidth, 1, 20);
   DDX_Text(pDX, IDC_THICKPENWIDTH, m_nThickWidth);
   DDV_MinMaxInt(pDX, m_nThickWidth, 1, 20);
}

DoDataExchange 重写的成员函数必须在源文件中的宏语句。

有关数据交换的对话框和验证的更多信息,请参见 显示和操作数据窗体 和 数据交换的对话框和验证。 有关添加变量向导生成的DDX_和DDV_宏的说明,请参见 技术说明26

要求

头文件位置: afxwin.h


 

VC中的DoDataExchange

怎么设置控件和变量关联呢?

假如在对话框中加入一个picture控件的话

1.导入图片

2.拉picture控件到对话框上,设置属性,Type改为Bitmap,image选择导入的图片,ID一定要修改,不能为默认的IDC_Static,否则下面将做的Classwizard将不出现此控件ID。

3.ClassWizard中选择member variable Category选择 Control加入相应的CStatic变量 。

4.此时到DoDataExchange看,增加相应的数据交换语句,我的是DDX_Control(pDX, IDC_bt, m_bt);


 

void CUserDialog::DoDataExchange(CDataExchange* pDX) 

    CDialog::DoDataExchange(pDX); 
    DDX_Text(pDX, IDC_USER_EDIT, m_username); 
    DDV_MaxChars(pDX,m_username,10); //将用户名的最大长度控件在10个字符

DDX:Dialog Data Exchange 表示对话框数据交换

DDV:Dialog Data Valid 表示对话框数据有效性


总之,这个函数对理解MFC框架是很有用的。对于写控件也是很有用的。 


UpdataData函数内部调用了DoDataExchange。该函数只有一个布尔型参数,它决定了数据传送的方向。调用UpdateData(TRUE)将数据从对话框的控件中传送到对应的数据成员中,调用UpdateData(FALSE)则将数据从数据成员中传送给对应的控件。 

UpdateData(FALSE)是将变量的值传到控件. 
UpdateData(TRUE)是从控件中取值到关联的变量 

 

DoDataExchange会被框架调用,用来改变和验证对话框的数据。在这个函数中一般是将控件和某些变量关联,当在其它地方改变量的值,通过UpdateData 进行双向交换。如: 

UpdateData();//将控件的值传给变量 
m_variable= "string";//分别为控件的变量赋值 
UpdateData(FALSE);//将变量的值传给控件 

以上是关于怎么给dotnetbar控件名加变量的主要内容,如果未能解决你的问题,请参考以下文章

dotnetbar 中的 dotnetbarmanager 控件的使用问题

DotNetBar 的Label控件,当Text文本过长时,自动换行

DotNetBar三方控件问题

WinForm UI 美化

请教几个关于dotnetbar控件方面的问题。

如何取得DevComponents.DotNetBar.SideBar