甜石榴品种最好一种:一个MSFlexGrid 控件的使用的例子

来源:百度文库 编辑:中财网 时间:2024/05/10 11:11:28
本示例工程说明了   MSFlexGrid   控件的某些事件和容器功能。它表明如何使用   Visual   Basic   标准控件实现可进行单元内部编辑的工作表。创建   MSFlexGrid   数据显示的步骤如下:  
  1. 创建控件。  
  2. 设置属性。  
  3. 添加行标头和列标头。  
  4. 添加单元内部编辑功能。  
  5. 向文本框(“编辑”框)添加更新数据的功能。  
  6. 将数据从文本框中复制到   MSFlexGrid。  
   
  安装  
  方案中使用下述控件:  
  ■ MSFlexGrid   控件  
  ■ TextBox   控件  
   
  创建控件  
  本例中添加一个   MSFlexGrid   控件并在其内部添加一个   TextBox   控件,由此创建父子关系。如下所示:  
   
   
  设置属性  
  为   MSFlexGrid   控件和   TextBox   控件设置下述属性:  
  对象                              属性            设置值  
   
  MSFlexGrid 控件         Name              Fg2   
                                       Cols                6   
                                       Rows              20  
                                      FillStyle           1   -   Repeat  
                                      FocusRect       2   -   Heavy    
                                      FontName         Arial  
                                      FontSize          9  
  TextBox                      Name              txtEdit  
                                     FontName       Arial  
                                     FontSize            9  
                                    BorderStyle     0   -   None  
                                   Visible              False  
                           
   
   
  添加行标头和列标头  
  将下列代码添加到窗体的   Form_Load   过程中以修改   MSFlexGrid   控件,使它在外观上与工作表相象:  
  Sub   Form_Load   ()  
  Dim   i   As   Integer  
   
  '使第一列较窄。  
  Fg2.ColWidth(0)   =   Fg2.ColWidth(0)   /   2  
  Fg2.ColAlignment(0)   =   1 '放置在正中。  
   
  '标记行和列。  
  For   i   =   Fg2.FixedRows   To   Fg2.Rows   -   1  
          Fg2.TextArray(fgi(i,   0))   =   i  
  Next  
         For   i   =   Fg2.FixedCols   To   Fg2.Cols   -   1  
                Fg2.TextArray(fgi(0,   i))   =   i  
  Next  
   
  '初始化编辑框(于是,现在可加载它)。  
  txtEdit   =   ""  
  End   Sub  
   
  然后创建计算   TextArray   属性索引值的函数:  
  Function   Fgi   (r   As   Integer,   c   As   Integer)   As   Integer  
  Fgi   =   c   +   Fg2.Cols   *   r  
  End   Function  
   
  添加单元内部编辑功能  
  示例应用程序   (Flex.vbp)   演示了为移动和选择一组单元所需的功能。为添加单元内部编辑功能,须将下列代码添加到   MSFlexGrid   控件的   KeyPress   和   DblClick   事件中:  
  Sub   Fg2_KeyPress   (KeyAscii   As   Integer)  
  MSFlexGridEdit   Fg2,   txtEdit,   KeyAscii  
  End   Sub  
   
  Sub   Fg2_DblClick   ()  
  MSFlexGridEdit   Fg2,   txtEdit,   32   '模拟一个空格。  
  End   Sub  
   
  为初始化文本框并将焦点从   MSFlexGrid   控件转移到   TextBox,可添加下列例程:  
  Sub   MSFlexGridEdit   (MSFlexGrid   As   Control,   _  
  Edt   As   Control,   KeyAscii   As   Integer)  
   
  '使用已输入的字符。  
  Select   Case   keyascii  
   
  '空格表示编辑当前的文本。  
  Case   0   To   32  
  Edt   =   MSFlexGrid  
  Edt.SelStart   =   1000  
   
  '其它所有字符表示取代当前的文本。  
  Case   Else  
  Edt   =   Chr(keyascii)  
  Edt.SelStart   =   1  
  End   Select  
   
  '在合适的位置显示   Edt。  
  Edt.Move   MSFlexGrid.CellLeft,   MSFlexGrid.CellTop,   _  
  MSFlexGrid.CellWidth,   MSFlexGrid.CellHeight  
  Edt.Visible   =   True  
   
  '启动工作。  
  Edt.SetFocus  
  End   Sub  
   
  为更新数据向   TextBox   添加新的功能  
  将下列例程添加到   TextBox   的   KeyPress   和   DblClick   事件中,以实现数据更新:  
  Sub   txtEdit_KeyPress   (KeyAscii   As   Integer)  
  '删除回车符,以消除嘟嘟声。  
  If   KeyAscii   =   vbCr   Then   KeyAscii   =   0  
  End   Sub  
   
  Sub   txtEdit_KeyDown   (KeyCode   As   Integer,   _  
  Shift   As   Integer)  
  EditKeyCode   Fg2,   txtEdit,   KeyCode,   Shift  
  End   Sub  
   
  Sub   EditKeyCode   (MSFlexGrid   As   Control,   Edt   As   _  
  Control,   KeyCode   As   Integer,   Shift   As   Integer)  
   
  '标准编辑控件处理。  
  Select   Case   KeyCode  
   
  Case   27 'ESC:隐藏焦点并将其返回   MSFlexGrid。  
  Edt.Visible   =   False  
  MSFlexGrid.SetFocus  
   
  Case   13 'ENTER   将焦点返回   MSFlexGrid。  
  MSFlexGrid.SetFocus  
   
  Case   38 '向上。  
  MSFlexGrid.SetFocus  
  DoEvents  
  If   MSFlexGrid.Row   >   MSFlexGrid.FixedRows   Then  
  MSFlexGrid.Row   =   MSFlexGrid.Row   -   1  
  End   If  
   
  Case   40 '向下。  
  MSFlexGrid.SetFocus  
  DoEvents  
  If   MSFlexGrid.Row   <   MSFlexGrid.Rows   -   1   Then  
  MSFlexGrid.Row   =   MSFlexGrid.Row   +   1  
  End   If  
  End   Select  
  End   Sub  
   
  将   TextBox   的数据复制到   MSFlexGrid  
  最后,当把数据输入到   TextBox   中时,先告诉   MSFlexGrid   控件应该对数据做什么。当用户输入数据并按   ENTER   键,或用鼠标单击   MSFlexGrid   控件中的另一个单元时,焦点将返回此控件。这时   TextBox   中的文本被复制到活动单元中。将下列代码添加到   GotFocus   和   LeaveCell   事件过程中:  
  Sub   Fg2_GotFocus   ()  
  If   txtEdit.Visible   =   False   Then   Exit   Sub  
  Fg2   =   txtEdit  
  txtEdit.Visible   =   False  
  End   Sub  
   
  Sub   Fg2_LeaveCell   ()  
  If   txtEdit.Visible   =   False   Then   Exit   Sub  
  Fg2   =   txtEdit  
  txtEdit.Visible   =   False  
  End   Sub  
   
  运行时,就象在本例中那样可在单个单元中输入数据: