I cannot reproduce you problem.
I created a new Windows Forms application using .NET Framework 4.5, and I put one Label on the form. I then have the following code:
protected override void OnLoad(EventArgs e)
{
base.OnLoad(e);
string s = ((char)7).ToString();
this.label1.Text = s;
Debug.Assert(this.label1.Text == s);
}
As expected, it runs just fine. Using the default font, this displays a thin bullet.
My guess is that something else is going wrong that has nothing to do with non-printable ASCII characters.
UPDATE: However, the Windows API's behind the label use null-terminated strings, meaning that a zero byte will be interpreted as the end of the string. So the following program fails:
protected override void OnLoad(EventArgs e)
{
base.OnLoad(e);
var bytes = new byte[] { 7, 0, 0x6c, 0 };
string s = Encoding.ASCII.GetString(bytes);
this.label1.Text = s;
Debug.Assert(this.label1.Text == s);
}
After the assignment, the Label.Text property contains a string of length 1, only containing the character with ASCII code 7.
But this works:
var bytes = new byte[] { 7, 0, 0x6c, 0 };
string s = Encoding.ASCII.GetString(bytes).Replace((char)0, '.');
this.label1.Text = s;
Debug.Assert(this.label1.Text == s);