📄 datagriddoubleclickcolumn.h
字号:
#pragma once
using namespace System;
using namespace System::ComponentModel;
using namespace System::Collections;
using namespace System::Diagnostics;
using namespace System::Windows::Forms;
using namespace System::Drawing;
using namespace System::Data;
using namespace System::Collections;
namespace My
{
/// <summary>
/// DataGridDoubleClickColumn 摘要
/// </summary>
__gc public class DataGridDoubleClickColumn : public System::Windows::Forms::DataGridColumnStyle
{
public:
TextBox* _textBox;
bool _inEdit;
public:
DataGridDoubleClickColumn(DataGrid* dataGrid)
{
InitializeComponent();
_textBox = new TextBox();
dataGrid->Controls->Add(_textBox);
_textBox->Visible = false;
_inEdit = false;
}
DataGridDoubleClickColumn(System::ComponentModel::IContainer *container) : components(0)
{
/// <summary>
/// Windows.Forms 类撰写设计器支持所必需的
/// </summary>
container->Add(this);
InitializeComponent();
}
protected:
void Dispose(Boolean disposing)
{
if (disposing && components)
{
components->Dispose();
}
__super::Dispose(disposing);
}
private:
/// <summary>
/// 必需的设计器变量。
/// </summary>
System::ComponentModel::Container *components;
/// <summary>
/// 设计器支持所需的方法 - 不要用代码编辑器
///修改此方法的内容。
/// </summary>
void InitializeComponent(void)
{
components = new System::ComponentModel::Container();
}
protected:
void Abort(int rowNum) {
_inEdit = false;
_textBox->Hide();
}
/// <summary>
/// Standard override
/// </summary>
/// <param name="dataSource"></param>
/// <param name="rowNum"></param>
/// <returns></returns>
bool Commit(CurrencyManager* dataSource,int rowNum)
{
if(!_inEdit)
{
return true;
}
try
{
Object* _value = _textBox->Text;
if(NullText->Equals(_value))
{
_value = System::Convert::DBNull;
}
this->SetColumnValueAtRow(dataSource, rowNum, _value);
}
catch(...)
{
return false;
}
__finally
{
_inEdit = false;
_textBox->Hide();
}
return true;
}
/// <summary>
/// Standard override
/// </summary>
/// <param name="source"></param>
/// <param name="rowNum"></param>
/// <param name="bounds"></param>
/// <param name="readOnly"></param>
/// <param name="instantText"></param>
/// <param name="cellIsVisible"></param>
void Edit(CurrencyManager* source, int rowNum, Rectangle bounds, bool readOnly, String* instantText, bool cellIsVisible)
{
_textBox->Text = "";
//Rectangle _originalBounds = bounds;
//_oldValue = _comboBox->Text;
if(!cellIsVisible) return;
bounds.Offset(2, 1);
bounds.Width -= 2* 2;
bounds.Height -= 1;
_textBox->Bounds = bounds;
_textBox->Visible = true;
//_comboBox.BringToFront();
//_comboBox.Focus();
_textBox->Text = GetText(GetColumnValueAtRow(source, rowNum));
if(instantText != NULL)
{
_textBox->Text = instantText;
//int End = _comboBox->Text->Length;
//_comboBox->Select(End, 0);
}
else
{
_textBox->SelectAll();
}
//this.DataGridTableStyle.DataGrid.Invalidate(OriginalBounds);
//_comboBox.BringToFront();
_inEdit = true;
}
/// <summary>
/// Standard override
/// </summary>
/// <returns></returns>
int GetMinimumHeight() {
return _textBox->PreferredHeight + 1;
}
/// <summary>
/// Standard override
/// </summary>
/// <param name="g"></param>
/// <param name="val"></param>
/// <returns></returns>
int GetPreferredHeight(Graphics* g ,Object* val)
{
return FontHeight + 1;
}
/// <summary>
/// Standard override
/// </summary>
/// <param name="g"></param>
/// <param name="val"></param>
/// <returns></returns>
Size GetPreferredSize(Graphics* g, Object* val)
{
Size _extents = Size::Ceiling(g->MeasureString(GetText(val), this->DataGridTableStyle->DataGrid->Font));
_extents.Width += 2;
_extents.Height += 1;
return _extents;
}
/// <summary>
/// Standard override
/// </summary>
/// <param name="g"></param>
/// <param name="bounds"></param>
/// <param name="source"></param>
/// <param name="rowNum"></param>
void Paint(Graphics* g,Rectangle bounds,CurrencyManager* source,int rowNum)
{
Paint(g, bounds, source, rowNum, false);
}
/// <summary>
/// Standard override
/// </summary>
/// <param name="g"></param>
/// <param name="bounds"></param>
/// <param name="source"></param>
/// <param name="rowNum"></param>
/// <param name="alignToRight"></param>
void Paint(Graphics* g,Rectangle bounds,CurrencyManager* source,int rowNum, bool alignToRight)
{
String* _text = GetText(GetColumnValueAtRow(source, rowNum));
PaintText(g, bounds, _text, alignToRight);
}
// Helper functions
private:
void PaintText(Graphics* g ,Rectangle bounds, String* text,bool alignToRight)
{
Brush* _backBrush = new SolidBrush(this->DataGridTableStyle->BackColor);
Brush* _foreBrush= new SolidBrush(this->DataGridTableStyle->ForeColor);
Rectangle _rect = bounds;
RectangleF _rectF = RectangleF::op_Implicit(_rect);
StringFormat* _format = new StringFormat();
if(alignToRight) {
_format->FormatFlags = StringFormatFlags::DirectionRightToLeft;
}
switch(this->Alignment) {
case HorizontalAlignment::Left:
_format->Alignment = StringAlignment::Near;
break;
case HorizontalAlignment::Right:
_format->Alignment = StringAlignment::Far;
break;
case HorizontalAlignment::Center:
_format->Alignment = StringAlignment::Center;
break;
}
_format->FormatFlags =StringFormatFlags::NoWrap;
g->FillRectangle(_backBrush, _rect);
_rect.Offset(0, 1);
_rect.Height -= 1;
g->DrawString(text, this->DataGridTableStyle->DataGrid->Font, _foreBrush, _rectF, _format);
_format->Dispose();
}
String* GetText(Object* val)
{
if(val == System::DBNull::Value)
{
return this->NullText;
}
if(val != NULL)
{
return val->ToString();
}
else
{
return String::Empty;
}
}
};
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -