2014-01-15 40 views
0

我正在編寫一個程序,開始時需要一定數量的文本行,爲此我使用TextBox。爲了使程序看起來不錯,我在窗體上放置了一個背景圖像。現在我不希望TextBox在圖像上放置一個大白塊,因此我使TextBox具有透明背景。但問題在於:只要我開始在TextBox中放置文本,帶有文本的行將恢復到我不想要的白色背景。那麼我怎樣才能阻止我的程序做到這一點?當在文本框中輸入文本時,保持背景恆定

我不能發表圖片,所以我就用鏈接:

此圖片顯示的背景,因爲我有它,我多麼希望它是:

此圖像顯示會發生什麼,當我開始打字:

我希望背景只是保持不變,同時I型(當然,文本顏色應該那麼b更輕,但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); 
    } 
} 
+0

這是一個Windows窗體應用程序,WPF,還是什麼? –

+0

我開始了一個空的項目,並且自己編寫了所有的代碼,但是正如上面的代碼所說'NieuwSpel:Form'我猜這是一個表單應用程序,而不是WPF或其他東西。 – RoelofJ

+0

對不起,你失去了我在「NieuwSpel」:-)。如果將適當的標籤添加到問題中,您會得到更好的答案。 –

回答

2

這可能不會是容易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> 
+0

感謝您的迴應:)我只在c#中學習過一門課,所以我還沒有學到這一點,但這看起來完全像我想要的。但是,我想知道:我有這個WPF和這個WPF之間的交互是如何工作的?我的項目的其餘部分與代碼的這部分內容相同。 – RoelofJ

+0

WPF是一個全新的設計平臺。如果你在VS中創建一個新項目,你會看到「Windows窗體」(WinForms)的選項,以及「WPF應用程序」的另一個選項。我不打擾混合這兩個。您可以讓他們一起工作(我們必須在工作中這樣做),但這確實很痛苦,並不像只是將WPF項目添加到現有解決方案並引用它那麼簡單。 –

+0

好的,謝謝,發現它:)我還發現一些WPF在線上,我會嘗試和重做WPF項目中的佈局。我認爲這解決了問題,所以我會標記回答的問題。 – RoelofJ

相關問題