Laden...

BackGroundColor in TextBox

Erstellt von MacSpi vor 17 Jahren Letzter Beitrag vor 17 Jahren 1.672 Views
M
MacSpi Themenstarter:in
10 Beiträge seit 2006
vor 17 Jahren
BackGroundColor in TextBox

N' Abend Miteinander,

ich versuche gerade die Hintergrundfarbe einer TextBox zu ändern. Im Designer klappt das auch wunderbar und zur Runntime ist der Wert von TextBox.BackGroundColor auch richtig gesetzt. nur ist und bleibt der Hintergrund grau. Andere explizit gesetzte Properties: WordWrap=true, AcceptReturn=true, AcceptTab=true, MultiLine=true,Editable=false. Das Ganze läuft auf PocketPC 2003 mit .NET 2.0.
Für Vorschläge wäre ich dankbar.

KISS

I
1.739 Beiträge seit 2005
vor 17 Jahren

Frage:
Ist die Textbox Disabled?

M
MacSpi Themenstarter:in
10 Beiträge seit 2006
vor 17 Jahren

Original von ikaros
Frage:
Ist die Textbox Disabled?

Antwort:
Nein, natürlich nicht.

KISS

I
1.739 Beiträge seit 2005
vor 17 Jahren

>Nein, natürlich nicht.
Es geht um Technik nicht um Natur 😉 .

Also CF2.0 und ein paar Props.
Ist der(einer der vielen) Container disabled?
Falls nicht gib mal etwas Code, ich seh bisher keinen Grund für derartiges Verhalten der TB.

Es sei denn Editable=false ist anders als bei Win32-Env. - vermutlich, prüf mal die Eigenschaft.

M
MacSpi Themenstarter:in
10 Beiträge seit 2006
vor 17 Jahren

Nope, TextBox liegt in ner Form, mehr ist nicht. Beide Enabled=true. Bisher habe ich zu dem Problem nur eine Beispielkapitel aus einem Buch gefunden ".. the textbox will be still grey, I will show a solution for this issue in chapter 8 .." Ha Ha Ha. Und mit sowas wird dann der Google Index vollgemüllt. Was mir allerdings aufgefallen ist, wenn ich Scrollbars setzte und die Komponente ein bissel Zeit zum Validieren braucht (sind immerhin 500k Chars) ist der Hintergrund wie gewünscht, allerdings zeichnet sich die Komponente anschliessend neu und der Hintergrund ist wieder grau. grmbl mit java konnte man sich wenigstens noch durch den Code der Komponenten debuggen.
Der Code:


using System;
using System.Collections.Generic;
using System.Drawing;
using System.IO;
using System.Text;
using System.Windows.Forms;

namespace TextReader
{
	public partial class Form1 : Form
	{
		private StreamReader m_reader;
		private List<string> m_lines = new List<string>();
		private int m_currentLine = 0;


		public Form1()
		{
			InitializeComponent();
		}

		private void ReadText()
		{
			if (m_reader == null)
			{
				return;
			}
			string line;
			while ((line = m_reader.ReadLine()) != null)
			{
				m_lines.Add(line);
			}
			UpdateText();
		}



		private void toolBar1_ButtonClick(object sender, ToolBarButtonClickEventArgs args)
		{
			if (args.Button == toolBarButton1)
			{
				if (m_reader != null)
				{ m_reader.Close(); }
				OpenFileDialog dialog = new OpenFileDialog();
				if (dialog.ShowDialog() == DialogResult.OK)
				{
					string fileName = dialog.FileName;
					textBox1.Text = "";
					m_reader = new StreamReader(new FileStream(fileName, FileMode.Open), Encoding.UTF8);
					ReadText();
				}
			}
			else if (args.Button == toolBarButton2)
			{
				Font font = textBox1.Font;
				textBox1.Font = new Font(font.Name, font.Size + 1, font.Style);

			}

			else if (args.Button == toolBarButton3)
			{
				Font font = textBox1.Font;
				textBox1.Font = new Font(font.Name, Math.Max(font.Size - 1, 1), font.Style);
			}

		}

		private void Form1_Closed(object sender, EventArgs args)
		{
			textBox1.Text = "";
		}

		private void vScrollBar1_ValueChanged(object sender, EventArgs args)
		{
			m_currentLine = vScrollBar1.Value;
			UpdateText();
		}

		private void UpdateText()
		{
			textBox1.Text = "";
			string text = "";
			for (int index = 0; index < 20; index++)
			{
				if (m_lines.Count > (m_currentLine + index))
				{
					text += m_lines[m_currentLine + index] + "\r\n";
				}
			}
			textBox1.Text = text;
		}
	}
}

und der Designercode


namespace TextReader
{
	partial class Form1
	{
		/// <summary>
		/// Required designer variable.
		/// </summary>
		private System.ComponentModel.IContainer components = null;

		/// <summary>
		/// Clean up any resources being used.
		/// </summary>
		/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
		protected override void Dispose(bool disposing)
		{
			if (disposing && (components != null))
			{
				components.Dispose();
			}
			base.Dispose(disposing);
		}

		#region Windows Form Designer generated code

		/// <summary>
		/// Required method for Designer support - do not modify
		/// the contents of this method with the code editor.
		/// </summary>
		private void InitializeComponent()
		{
			System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(Form1));
			this.toolBar1 = new System.Windows.Forms.ToolBar();
			this.toolBarButton1 = new System.Windows.Forms.ToolBarButton();
			this.toolBarButton2 = new System.Windows.Forms.ToolBarButton();
			this.toolBarButton3 = new System.Windows.Forms.ToolBarButton();
			this.toolBarButton4 = new System.Windows.Forms.ToolBarButton();
			this.toolBarButton5 = new System.Windows.Forms.ToolBarButton();
			this.imageList1 = new System.Windows.Forms.ImageList();
			this.textBox1 = new System.Windows.Forms.TextBox();
			this.vScrollBar1 = new System.Windows.Forms.VScrollBar();
			this.SuspendLayout();
			// 
			// toolBar1
			// 
			this.toolBar1.Buttons.Add(this.toolBarButton1);
			this.toolBar1.Buttons.Add(this.toolBarButton2);
			this.toolBar1.Buttons.Add(this.toolBarButton3);
			this.toolBar1.Buttons.Add(this.toolBarButton4);
			this.toolBar1.Buttons.Add(this.toolBarButton5);
			this.toolBar1.ImageList = this.imageList1;
			this.toolBar1.Name = "toolBar1";
			this.toolBar1.ButtonClick += new System.Windows.Forms.ToolBarButtonClickEventHandler(this.toolBar1_ButtonClick);
			// 
			// toolBarButton1
			// 
			this.toolBarButton1.ImageIndex = 0;
			// 
			// toolBarButton2
			// 
			this.toolBarButton2.ImageIndex = 1;
			// 
			// toolBarButton3
			// 
			this.toolBarButton3.ImageIndex = 2;
			this.imageList1.Images.Clear();
			this.imageList1.Images.Add(((System.Drawing.Image)(resources.GetObject("resource"))));
			this.imageList1.Images.Add(((System.Drawing.Image)(resources.GetObject("resource1"))));
			this.imageList1.Images.Add(((System.Drawing.Image)(resources.GetObject("resource2"))));
			// 
			// textBox1
			// 
			this.textBox1.AcceptsReturn = true;
			this.textBox1.AcceptsTab = true;
			this.textBox1.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
							| System.Windows.Forms.AnchorStyles.Left)
							| System.Windows.Forms.AnchorStyles.Right)));
			this.textBox1.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(255)))), ((int)(((byte)(255)))), ((int)(((byte)(192)))));
			this.textBox1.Location = new System.Drawing.Point(0, 0);
			this.textBox1.MaxLength = 1000000000;
			this.textBox1.Multiline = true;
			this.textBox1.Name = "textBox1";
			this.textBox1.ReadOnly = true;
			this.textBox1.Size = new System.Drawing.Size(227, 268);
			this.textBox1.TabIndex = 2;
			// 
			// vScrollBar1
			// 
			this.vScrollBar1.Dock = System.Windows.Forms.DockStyle.Right;
			this.vScrollBar1.Location = new System.Drawing.Point(227, 0);
			this.vScrollBar1.Name = "vScrollBar1";
			this.vScrollBar1.Size = new System.Drawing.Size(13, 268);
			this.vScrollBar1.TabIndex = 4;
			this.vScrollBar1.ValueChanged += new System.EventHandler(this.vScrollBar1_ValueChanged);
			// 
			// Form1
			// 
			this.AutoScaleDimensions = new System.Drawing.SizeF(96F, 96F);
			this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Dpi;
			this.AutoScroll = true;
			this.ClientSize = new System.Drawing.Size(240, 268);
			this.Controls.Add(this.vScrollBar1);
			this.Controls.Add(this.textBox1);
			this.Controls.Add(this.toolBar1);
			this.Name = "Form1";
			this.Text = "Form1";
			this.ResumeLayout(false);

		}

		#endregion

		private System.Windows.Forms.ToolBar toolBar1;
		private System.Windows.Forms.ToolBarButton toolBarButton1;
		private System.Windows.Forms.ImageList imageList1;
		private System.Windows.Forms.ToolBarButton toolBarButton2;
		private System.Windows.Forms.ToolBarButton toolBarButton3;
		private System.Windows.Forms.ToolBarButton toolBarButton4;
		private System.Windows.Forms.ToolBarButton toolBarButton5;
		private System.Windows.Forms.TextBox textBox1;
		private System.Windows.Forms.VScrollBar vScrollBar1;


	}
}

KISS

I
1.739 Beiträge seit 2005
vor 17 Jahren

Heut(Heute schon, aber nicht mehr diese Nacht) nicht mehr, aber später gern. Müde und Buchstaben gehen langsam schwimmen...
Halt zu spät geworden(muss schon um 9 raus 😉 )

T
68 Beiträge seit 2006
vor 17 Jahren

Ich hab momentan den Code überflogen und ich seh auf anhieb auch keinen Fehler. Setzt du die Farbe eigenltich händisch. Wenn ja könntest sie ja auch im Construktor händisch nochmal setzten zu lassen. Geht das auch nicht liegt das Problem woanders. Da der Designer schon abgeschlossen ist.

 
public Form1()
{
            InitializeComponent();
            this.textBox1.BackColor = Color.FromArgb(255,255,192);
}

mfg TiTime

M
MacSpi Themenstarter:in
10 Beiträge seit 2006
vor 17 Jahren

Habe ich schon probiert, nutzt aber nix.

KISS

T
68 Beiträge seit 2006
vor 17 Jahren

Ich mein die einzige Vermutung die ich noch habe die aus deinem gezeigten Code noch sein könnte, läge bei

textBox1.Font = new Font(font.Name, font.Size + 1, font.Style);

Kann ich mir zwar fast nicht vorstellen, das Font auch festlegt auf welcher hintergrund farbe geschrieben wird aber ich hab die klasse noch nicht genauer betrachtet.

Weiters stellt sich die Frage ob du schon bei der initialisierung eine neue fontzuordnung vornimmst wenn nein und das textbox ist bei der anzeige dennoch grau bin ich ehe ratlos und das obige war stuss. Sonst sehe ich aus deinem gezeigtem Code keine möglichkeit wo die textbox geändert werden könnte.

letzte Idee vs neu starten und project neu aufmachen. Ist aber eher in seltenen fällen die lösung. 😁

M
MacSpi Themenstarter:in
10 Beiträge seit 2006
vor 17 Jahren

Ich Lach mir nen Ast. Das Problem ist ReadOnly=false. Ob das jetzt ein Bug oder Feature ist weis ich nicht, aber Dokumnetieren hätte man es ja mal können. Naja, ein Problem gelöst, 5 neue dazu gekommen. Ich will java wiederhaben heul

KISS

187 Beiträge seit 2005
vor 17 Jahren

Beim ReadOnly sollte eigentlich auch die Hintergrundfarbe änderbar sein, aber das ist nicht immer der Fall.

Vermutlich hast du nach der Farbänderung die Eigenschaft "ReadOnly" = True gesetzt, womit die Hintergrundfarbe wieder zurück gesetzt wird. Ich kann das im moment nicht nachvollziehen, weil ich keine Entwicklungsumgebung hab, aber soweit ich weiss, kannst du folgendermaßen die Hintergrundfarbe ändern auch wenn du ReadOnly hast, indem Du zuerst ReadOnly setzt und dann die Farbe im BackGroundColor angibst.

M
MacSpi Themenstarter:in
10 Beiträge seit 2006
vor 17 Jahren

Nein, funktioniert nicht. Ist aber eigentlich auch logisch (wenn auch verquer) da beim verändern von ReadOnly BackColor nicht verändert wird. Scheint also das MS da auf eine Systemvariable zugreift um die Farben im ReadOnly und Disabled modus zu finden.

KISS

187 Beiträge seit 2005
vor 17 Jahren

Wenn dann läuft das über die onpaint methode der textbox. ich kann zu 90% garantieren, dass das unter .net 2002 ( ^^ ) funzt. Könnte in 2005 geändert worden sein, aber das kann ich eben mal nachschauen

Zwei minuten vergehen

Hmm, bei mir funzt das beim ReadOnly die Hintergrundfarbe zu ändern. Versuchen wir es mal mit enabled.

30 sekunden vergehen

Selbst bei Enabled oder Disabled funzt das....

in welcher reihenfolge und in welcher methode (event) hast du readonly oder farbänderungen gemacht? oder war das alles im designer?