2013-03-06 14 views
7

sono sicuro che la mia domanda o problema è davvero strano, ma è proprio questo:problema PictureBox layout in C#

Sto scrivendo un programma in C#, che ha il diritto di layout di sinistra (lingua araba). Aggiungo quindi il controllo pictureBox come immagine di sfondo nel modulo. Ho impostato il dock del pictureBox da riempire in modo che sia tutto il modulo.

Poiché l'immagine ha un design che coinvolge più di un colore, voglio rendere l'etichetta trasparente in modo che non abbia alcun colore e prenderà il colore dallo stesso pictureBox. Ecco come faccio a rendere trasparente l'etichetta:

label_customer_name.Parent = pictureBox1; 

label_customer_name.BackColor = Color.Transparent; 

Questo metodo funziona bene per cambiare il colore in trasparente ma c'è un problema. Quando imposto il genitore dell'etichetta come pictureBox, la posizione di quest'ultimo cambia e viene riflessa sull'altro lato. Ad esempio, se la posizione è impostata su X dopo l'esecuzione, la posizione sarà la larghezza del modulo - x. Qualche idea su come sbarazzarsi di questo problema?

Quello che sto cercando in breve è:

  1. C'è un altro modo per rendere l'etichetta trasparente senza impostare il genitore al controllo contenitore? Oppure

  2. Come modificare il layout di PictureBox e forzarlo da sinistra a destra.

Proprio come suggerimento e la cosa buffa è che: se aggiungo il pictureBox a un controllo scheda e impostare il controllo scheda di essere destra a sinistra, il problema scompare come sembra che il pictureBox otterrà il layout dal controllo struttura a schede ma non lo ottiene dal modulo stesso.

+2

Forse si può usare 'form.BackgroundImage' invece di pictureBox (idea se si aiuta con l'etichetta, come sembra a me che cosa quando si aggiunge l'etichetta di programmazione si hanno anche trattare con 'Anchor', non ha idea di come funzioni con RTL). – Sinatr

+0

Caro fratello, grazie per il tuo commento. Ho provato questa soluzione, ma il problema è che quando si aumenta la dimensione del forum l'immagine non mostra bene? Hai qualche idea su come risolverlo. – user2103335

+0

Cosa ne pensi di metterlo in un pannello? Se il controllo struttura a schede risolve il problema, è possibile che una correzione invisibile sia possibile con un pannello. –

risposta

0

Utilizzare un controllo FlowLayoutPanel, che servirà per il requisito nascosto, È possibile impostare FlowDirection = RightToLeft e RightToLeft = True. Metti l'Immagine di sfondo del pannello all'immagine e aggiungi le etichette a quel pannello.

Fare un tentativo dovrebbe funzionare.

0

se il luogo cambiamenti dopo l'assegnazione del genitore, è possibile mantenere la posizione corrente del dell'etichetta dire (x, y) e assegnare un genitore ad esso e poi di nuovo impostare la sua posizione a (x, y)

ANCHE Puoi provare ad aggiungere il controllo etichetta nella casella immagine per impostare il genitore in modo diverso.

Un'altra soluzione per rendere trasparente il controllo dell'etichetta è impostare lo sfondo del controllo dell'etichetta in modo simile allo sfondo della casella di immagine. È possibile assegnare il colore che è in background. (Si tratta di una soluzione sporca e io personalmente non suggerire questo.)

0

si può provare qualcosa di simile:

Image im = Image.FromFile("imagePath"); 
this.BackgroundImage = im; 
this.BackgroundImageLayout = ImageLayout.Stretch; 
this.DoubleBuffered = true; 
0

Il controllo Label diventare un figlio del modulo quando si utilizza la progettazione form. È la causa dell'opaco. È necessario impostare la proprietà Parent sull'oggetto PictureBox dopo InitializeComponent.

InitializeComponent(); 
label1.Parent = pictureBox1; 
label1.BackColor = Color.Transparent;