Designing a Backspace key
Through a series of mechanical transformations, it's possible to simplify the code down to this:

private void buttonDelete_Click(object sender, EventArgs e)
{
    textBox1.Focus();

    if (textBox1.SelectionLength &gt; 0)
    {
        textBox1.SelectedText = "";
    }
    else if (textBox1.SelectionStart &gt; 0)
    {
        textBox1.Text = textBox1.Text.Remove(--textBox1.SelectionStart, 1);
    }
}


It's now simple enough that the code would be better without comments.



How I got there:


Both of your else { return; } are superfluous.
The if (TxTindex &gt;0 &amp;&amp; TxTindex == textBox1.Text.Length) case is a redundant special case; its else clause contains exactly the same code.


The code so far:

private void buttonDelete_Click(object sender, EventArgs e)
{
    textBox1.Focus(); // set the textbox focused.

    if (textBox1.SelectionStart &gt;= 0) //check if there is text to delete
    {
        int TxTindex = textBox1.SelectionStart; // save the index position

        if (textBox1.SelectedText.Length &gt; 0)  //// check if there is selected text
        {
            textBox1.SelectedText = "";  
        }
        else if (TxTindex &gt; 0) // check if there is text in texbox
        {
            textBox1.Text = textBox1.Text.Remove(TxTindex - 1, 1);
            textBox1.SelectionStart = TxTindex - 1; // to set the cursor position after the deleted number between the text.
        }
    }
}



The outer if (textBox1.SelectionStart &gt;= 0) is redundant, since the if (textBox1.SelectionText.Length &gt; 0) and else if (TxtIndex &gt; 0) tests are both more specific.
textBox1.SelectedText.Length is better written as textBox1.SelectionLength.
The TxtIndex variable (which would be better named textIndex to be consistent with textBox1) can be eliminated.