在文本框中键入文本时,请保持背景不变

时间:2014-01-15 01:06:34

标签: c# winforms textbox

我正在编写一个程序,开始时需要一定数量的文本行,为此我使用TextBox。为了使程序看起来不错,我在表单上放了一个背景图像。现在我不希望TextBox在图像上放置一个大的白色块,所以为此我使TextBox具有透明背景。但问题出在这里:一旦我开始在TextBox中添加文本,带有文本的行将恢复为我不想要的白色背景。那么我怎么能阻止我的程序呢?

我还无法发布图片,所以我只会使用链接:

此图像显示了我拥有的背景以及我希望它如何:

此图显示了我开始输入时会发生什么:

我希望在键入时背景保持不变(当然文本颜色应该更亮,但textbox.forecolor似乎没有效果。

以下是我到目前为止的代码,我希望你能帮助我,我还是很陌生:)

public class NieuwSpel : Form
{
    Label spelerslijst, nummer;
    TextBox spelersInput, spelnr;
    Button OK;

    public NieuwSpel()
    {
        this.BackgroundImage = WeerwolvenvanWakkerdam.Properties.Resources.Background_NieuwSpel;
        this.FormBorderStyle = FormBorderStyle.Fixed3D;

        spelerslijst = new Label();
        spelerslijst.Location = new Point(10, 10);
        spelerslijst.Text = "Voer hier de spelerslijst in:";
        spelerslijst.Width = 200;
        spelerslijst.BackColor = Color.Transparent;
        spelerslijst.ForeColor = Color.White;
        this.Controls.Add(spelerslijst);

        spelersInput = new CustomTextBox();
        spelersInput.Location = new Point(10, 40);
        spelersInput.Size = new Size(200, 300);
        spelersInput.Multiline = true;
        spelersInput.BackColor = Color.FromArgb(100, 100, 100, 100);
        spelersInput.ForeColor = Color.White;
        spelersInput.GotFocus += this.setColour;
        this.Controls.Add(spelersInput);

        OK = new Button();
        OK.Text = "Start Spel!";
        OK.Location = new Point(110, 430);
        OK.Click += this.Start;
        this.Controls.Add(OK);

        nummer = new Label();
        nummer.Text = "Spelnummer:";
        nummer.Width = 75;
        nummer.Location = new Point(10, 360);
        nummer.BackColor = Color.Transparent;
        nummer.ForeColor = Color.White;
        this.Controls.Add(nummer);

        spelnr = new CustomTextBox();
        spelnr.Width = 50;
        spelnr.Height = 20;
        spelnr.Location = new Point(90, 360);
        spelnr.BackColor = Color.FromArgb(100, 100, 100, 100);
        spelnr.ForeColor = Color.White;
        this.Controls.Add(spelnr);
    }

    public void setColour(object o, EventArgs ea)
    {
        ((CustomTextBox)o).BackColor = Color.FromArgb(100, 100, 100, 100);
    }
}

public partial class CustomTextBox : TextBox
{
    public CustomTextBox()
    {
        SetStyle(ControlStyles.SupportsTransparentBackColor |
             ControlStyles.OptimizedDoubleBuffer |
             ControlStyles.AllPaintingInWmPaint |
             ControlStyles.ResizeRedraw |
             ControlStyles.UserPaint, true);
    }
}

1 个答案:

答案 0 :(得分:3)

WinForms这可能不容易。如果你只是在自己搞乱并试图学习,你可能想考虑使用WPF。很多人仍然需要处理WinForms,但我已经开发出来了WPF肯定会取代它。

它可以开箱即用提供所需的效果:

enter image description here

<Window x:Class="SampleWpf.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:l="clr-namespace:SampleWpf"
        Title="MainWindow" Height="250" Width="400" >
    <Window.Background>
        <ImageBrush ImageSource="images.jpg" />
    </Window.Background>
    <Grid>
        <TextBox Margin="5" Background="Transparent" Text="HELLO THERE!"
                 FontSize="20" FontWeight="Bold" Foreground="White" />
    </Grid>
</Window>