Winforms 如何通过仅突出显示已编辑的文本来管理已更改的值文本?

Winforms 如何通过仅突出显示已编辑的文本来管理已更改的值文本?,winforms,datagridview,colors,richtextbox,edit,Winforms,Datagridview,Colors,Richtextbox,Edit,我的问题似乎是重复的,尽管它与我以前遇到的问题不同 我已经成功地向datagridview添加了一个richtexbox列,因为这一直是我的问题。现在,您可以将richtextbox添加到datagridview 现在,我试图只突出显示编辑的文本,但我没有设置它的工作,因为编辑文本后,它突出显示整个文本 举个我想得到的例子 “测试”=测试ing 在上面的示例中,我只想突出显示现有示例中唯一添加的示例 下面的代码突出显示了datagridview richtextbox单元格中的全部文本,这不是我

我的问题似乎是重复的,尽管它与我以前遇到的问题不同

我已经成功地向datagridview添加了一个richtexbox列,因为这一直是我的问题。现在,您可以将richtextbox添加到datagridview

现在,我试图只突出显示编辑的文本,但我没有设置它的工作,因为编辑文本后,它突出显示整个文本

举个我想得到的例子

“测试”=测试ing

在上面的示例中,我只想突出显示现有示例中唯一添加的示例

下面的代码突出显示了datagridview richtextbox单元格中的全部文本,这不是我想要的

用于颜色更改的代码

 private void Gridview_Output_CellValueChanged(object sender, DataGridViewCellEventArgs e)
    {
        if (e.RowIndex >= 0)
        {
            Gridview_Output.Rows[e.RowIndex].Cells[e.ColumnIndex].Style.ForeColor = Color.Red;
        }
    }
Richtextbox类

public partial class RichTextBoxControl : DataGridViewColumn
{
    public RichTextBoxControl(): base()
    {
        base.CellTemplate = new RichTextboxCell1();
    }

    public override DataGridViewCell CellTemplate
    {
        get
        {
            return base.CellTemplate;
        }
        set
        {
            if (!((value == null)) && !(value.GetType().IsAssignableFrom(typeof(RichTextboxCell1))))
            {
                throw new InvalidCastException("Must be a CalendarCell");
            }
            base.CellTemplate = value;
        }
    }
}
public class RichTextboxCell1 : DataGridViewTextBoxCell
{

    public RichTextboxCell1()
    {

    }
    public override void InitializeEditingControl(int rowIndex, object initialFormattedValue, DataGridViewCellStyle dataGridViewCellStyle)
    {


        base.InitializeEditingControl(rowIndex, initialFormattedValue, dataGridViewCellStyle);

        RichTextBoxEditingControl1 ctl = (RichTextBoxEditingControl1)DataGridView.EditingControl;
        if (this.RowIndex >= 0)
        {
            if ((!object.ReferenceEquals(this.Value, DBNull.Value)))
            {
                if (this.Value != null)
                {
                    if (this.Value != string.Empty)
                    {
                        try
                        {
                            ctl.Text   =this.Value.ToString();
                        }
                        catch (Exception ex)
                        {
                        }
                    }
                }
            }
        }
    }

    public override System.Type EditType
    {
        get
        {
            return typeof(RichTextBoxEditingControl1);
        }
    }

    public override System.Type ValueType
    {
        get
        {
            return typeof(String);
        }
    }

    public override object DefaultNewRowValue
    {
        get
        {
            return String.Empty;
        }
    }
}

class RichTextBoxEditingControl1 : RichTextBox, IDataGridViewEditingControl
{
    private DataGridView dataGridViewControl;
    private bool valueIsChanged = false;
    private int rowIndexNum;

    public RichTextBoxEditingControl1()
    {

    }

    public object EditingControlFormattedValue
    {
        get
        {
            return this.Text;
        }
        set
        {  
            if (value is string)
            {
                this.Text = value.ToString();
            }
        }
    }

    public object GetEditingControlFormattedValue(DataGridViewDataErrorContexts context)
    {
        return this.Text;
    }

    public void ApplyCellStyleToEditingControl(DataGridViewCellStyle dataGridViewCellStyle)
    {
        this.Font = dataGridViewCellStyle.Font;
        this.ForeColor = dataGridViewCellStyle.ForeColor;
        this.BackColor = dataGridViewCellStyle.BackColor;
    }

    public int EditingControlRowIndex
    {
        get
        {
            return rowIndexNum;
        }
        set
        {
            rowIndexNum = value;
        }
    }

    public bool EditingControlWantsInputKey(Keys key, bool dataGridViewWantsInputKey)
    {
        if (Keys.KeyCode == Keys.Left || Keys.KeyCode == Keys.Up || Keys.KeyCode == Keys.Down || Keys.KeyCode == Keys.Right || Keys.KeyCode == Keys.Home || Keys.KeyCode == Keys.End || Keys.KeyCode == Keys.PageDown || Keys.KeyCode == Keys.PageUp)
        {
            return true;
        }
        else
        {
            return false;
        }
    }

    public void PrepareEditingControlForEdit(bool selectAll)
    {
    }

    public bool RepositionEditingControlOnValueChange
    {
        get
        {
            return false;
        }
    }

    public DataGridView EditingControlDataGridView
    {
        get
        {
            return dataGridViewControl;
        }
        set
        {
            dataGridViewControl = value;
        }
    }

    public bool EditingControlValueChanged
    {
        get
        {
            return valueIsChanged;
        }
        set
        {
            valueIsChanged = value;
        }
    }

    public Cursor EditingControlCursor
    {
        get
        {
            return base.Cursor;
        }
    }

    protected override void OnTextChanged(System.EventArgs eventargs)
    {
        valueIsChanged = true;
        this.EditingControlDataGridView.NotifyCurrentCellDirty(true);
        base.OnTextChanged(eventargs);
    }


    #region IDataGridViewEditingControl Members


    Cursor IDataGridViewEditingControl.EditingPanelCursor
    {
       get { return base.Cursor; }
    }

    #endregion
}

DataGridView
中的单个单元格中显示具有两种不同样式的单个文本的正确方法是通过应用这些样式,自己处理这些单元格的
CellPaint
事件。按照设计,默认情况下,一个单元格只能有一种样式。我不知道如何才能做到这一点……你能帮我在编码时显示出来吗?这可不是一件简单的事情。我没有时间或愿望为您编写工作代码。我已经为你指出了一个可能的解决办法。如果您不知道如何处理DataGridView中的
CellPaint
事件,我建议您尝试一下,如果您有更具体的问题,可以问另一个问题。我尝试了这个,但它仍然突出显示了全文