C#学习教程:在Windows窗体DataGridView单元中托管TreeView我通过如下扩展TreeView来遵循这里的示例。publicclassTreeViewEditingControl:TreeView,IDataGridViewEditingControlpublicclassTreeViewCell:DataGridViewComboBoxCell//不确定这是否应该是DataGridViewTextBoxCell这是我的问题。我可以在单元格中看到Treeview,但我不知道如何在用户单击单元格时增加Cell/TreeView的高度(如ComboBox展开)。有人对此有任何想法吗?我将使用TreeCtrlDocked生成一个新的无边框表单,我使用CalendarControl完成它并且工作正常。如果将表单的左上角设置为正在编辑的单元格的左上角,用户将不会知道其中的区别。希望这就是您要找的。编辑:这是我为文件选择单元所做的实现。当您单击它进行编辑时,它会在单元格中显示一个“浏览”按钮,这会打开一个FileOpenDialog。代码很冗长,但我认为您可以选择需要实现的部分。以上就是C#学习教程:Windows窗体DataGridView单元中宿主TreeView分享的全部内容。如果对你有用,需要进一步了解C#学习教程,希望你多多关注——……”;SaveFullPath=false;}publicoverrideDataGridViewCellCellTemplate{get{returnbase.CellTemplate;}set{//确保用于模板的单元格是DataGridViewFileCell.if(value!=null&&!value.GetType().IsAssignableFrom(typeof(DataGridViewFileCell))){thrownewInvalidCastException("MustbeaDataGridViewFileCell");}base.CellTemplate=值;}}[Description("LabeltoplaceonBrowsebutton"),Category("Appearance")][DefaultValue("...")]publicstringBrowseLabel{get;放;}[Description("Savefullpathname"),Category("Behavior")][DefaultValue(true)]publicboolSaveFullPath{get;放;}}公共类DataGridViewFileCell:DataGridViewTextBoxCell{publicDataGridViewFileCell():base(){}publicoverridevoidInitializeEditingControl(introwIndex,objectinitialFormattedValue,DataGridViewCellStyledataGridViewCellStyle){//将编辑控件的值设置为当前单元格值。base.InitializeEditingControl(rowIndex,initialFormattedValue,dataGridViewCellStyle);FileEditingControlctl=(FileEditingControl)DataGridView.EditingControl;//当Value属性为null时使用默认行值。if(this.Value==null){ctl.Filename=this.DefaultNewRowValue.ToString();}else{ctl.Filename=this.Value.ToString();}}publicoverrideTypeEditType{get{//返回DataGridViewFileCell使用的编辑控件的类型。返回类型(文件编辑控件);}}publicoverrideTypeValueType{get{//返回DataGridViewFileCell包含的值的类型。返回类型(字符串);}}}类FileEditingControl:FileTextBox,IDataGridViewEditingControl{DataGridViewdataGridView;公关ivateboolvalueChanged=false;int行索引;publicFileEditingControl(){}#regionIDataGridViewEditingControl实现publicobjectEditingControlFormattedValue{get{returnFilename;}set{if(valueisString){try{文件名=(String)value;}catch{文件名=value.ToString();}}}}publicobjectGetEditingControlFormattedValue(DataGridViewDataErrorContextscontext){returnEditingControlFormattedValue;}publicvoidApplyCellStyleToEditingControl(DataGridViewCellStyledataGridViewCellStyle){this.Font=dataGridViewCellStyle.Font;}publicintEditingControlRowIndex{get{returnrowIndex;}设置{rowIndex=value;}}publicboolEditingControlWantsInputKey(Keyskey,booldataGridViewWantsInputKey){switch(key&Keys.KeyCode){caseKeys.Left:caseKeys.Up:caseKeys.Down:caseKeys.Right:caseKeys.Home:caseKeys.结束:caseKeys.PageDown:caseKeys.PageUp:returntrue;默认值:返回!dataGridViewWantsInp键;}}publicvoidPrepareEditingControlForEdit(boolselectAll){}publicboolRepositionEditingControlOnValueChange{get{returnfalse;}}publicDataGridViewEditingControlDataGridView{get{returndataGridView;}设置{dataGridView=值;}}publicboolEditingControlValueChanged{get{returnvalueChanged;}设置{valueChanged=value;}}publicCursorEditingPanelCursor{get{returnbase.Cursor;}}#endregionprotectedoverridevoidOnValueChanged(FileEventArgseventargs){//通知DataGridView单元格的内容//已更改。价值改变=真;this.EditingControlDataGridView.NotifyCurrentCellDirty(true);base.OnValueChanged(eventargs);}}publicpartialclassFileTextBox:UserControl{#regionConstructorspublicFileTextBox(){InitializeComponent();工具提示=新工具提示();SaveFullPath=false;允许多个文件=假;浏览标签="...";}#endregion构造函数#region属性//////用于显示完整路径名的工具提示对象///privateToolTipTooltip;//////返回完整路径还是只返回文件名?///[Description("SaveFullPath"),Category("Behavior")][DefaultValue(false)]publicboolSaveFullPath{get;放;}//////表示此控件文件名的字符串///publicoverridestringText{get{returnbase.Text;}set{if(base.Text!=value){base.Text=value;Tooltip.SetToolTip(this,base.Text);无效();OnValueChanged(新的FileEventArgs(base.Text));}}}[Description("BrowseLabel"),Category("Appearance")][DefaultValue("...")]publicstringBrowseLabel{get{returnBrowse.Text;}set{Browse.Text=value;Browse.Width=TextRenderer.MeasureText(Browse.Text,Browse.Font).Width+8;Browse.Location=newPoint(this.Width-Browse.Width,Browse.Location.Y);}}[Description("AllowMultipleFiles"),Category("Behavior")][DefaultValue(false)]publicboolAllowMultipleFiles{get;放;}//////选定的文件名(与Text属性相同)///[Description("Filename"),Category("Data")]publicstringFilename{get{returnText;}设置{文本=值;}}#endregionProperties#regionEventHandlers//////当///publiceventEventHandlerValueChanged时引发的事件;protectedvirtualvoidOnValueChanged(FileEventArgseventargs){eventargs.Filename=Filename;如果(this.ValueChanged!=null)this.ValueChanged(this,eventargs);}privatevoidBrowse_Click(objectsender,EventArgse){OpenFileDialogdlg=newOpenFileDialog();dlg.FileName=文本;dlg.Multiselect=AllowMultipleFiles;if(dlg.ShowDialog()==DialogResult.OK){if(SaveFullPath)Text=dlg.FileName;否则Text=dlg.SafeFileName;}}protectedoverridevoidOnPaint(PaintEventArgse){//绘制客户端窗口Rectangler=newRectangle(newPoint(0,0),newSize(Size.Width-1,Size.Height-1));图形g=e.Graphics;g.FillRectangle(newSolidBrush(SystemColors.窗口),r);g.DrawRectangle(newPen(VisualStyleInformation.TextControlBorder),r);rY+=Margin.Top;r.Width-=Browse.Width;//填充文本TextRenderer.DrawText(g,Text,Font,r,ForeColor,TextFormatFlags.PathEllipsis);base.OnPaint(e);}privatevoidFileTextBox_DragDrop(objectsender,DragEventArgse){DataObject数据=(DataObject)e.Data;StringCollection文件名=data.GetFileDropList();如果(文件名。计数==1)文本=文件名[0];}privatevoidFileTextBox_DragEnter(objectsender,DragEventArgse){DataObject数据=(DataObject)e.Data;StringCollection文件名=data.GetFileDropList();if(/*!AllowMultipleFiles&&*/filenames.Count==1)e.Effect=DragDropEffects.Link;}#endregion事件处理程序}publicclassFileEventArgs:EventArgs{publicFileEventArgs(stringText){Filename=Text;}//////控件中的文件名///publicStringFilename{get;放;}}本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如有转载请注明出处:
