Prob con RichTextBox1 e ContextMenuStrip

domenica 04 settembre 2011 - 12.30
Tag Elenco Tags  VB.NET  |  .NET 4.0  |  Windows Vista  |  Visual Studio 2010

Fabiok89 Profilo | Newbie

Salve a tutti...vi illustro il mio prob...ho un form con 4 RichTextBox e di conseguenza 4 ContextMenuStrip deve al suo interno ho inserito incolla e copia...il codice funziona ma è troppo dispersivo e lungo io volevo sapere se con una sola ContextMenuStrip potevo gestire tutte e 4 le RichTextBox separatamente
e se qualkuno mi poteva dare una mano con il codice... x il momento quello che sto usando è questo vorei semplificarlo


1378x805 64Kb

u235 Profilo | Junior Member

Ciao, fai puntare al click il ToolStripItem allo stesso metodo (metodo void = sub in vb) e fai il cast dall'oggetto sender del parametro a ToolStripItem, ottenuto questo, nella proprietà Owner ricavi un ContextMenuStrip, da quest'ultimo, dalla proprietà SourceControl, ricavi un Control che rappresenta il controllo che contiene il menu contestuale, che nel tuo caso è appunto un RichTextBox, quindi fai un cast ad esso.

per spiegarmi meglio :

Il codice sorgente non è stato renderizzato qui
perchè non c'è sufficiente spazio.
Clicca qui per visualizzarlo in una nuova finestra


Ciao.

EDIT :

in realta, potresti anche evitare l'ultimo cast a RichTextBox, in quanto la proprietà text è gia presente in control, quindi potresti fare direttamente ContextMenuStrip.SourceControl.Text = Clipboard.GetText() anzichè Dim RichTextBox As RichTextBox = DirectCast(ContextMenuStrip.SourceControl, RichTextBox)
RichTextBox.Text = Clipboard.GetText()

Fabiok89 Profilo | Newbie

si questo funziona ma io volevo fare con un ToolStripMenuItem1 4 richtextbox

u235 Profilo | Junior Member

e qual'è il problema? intendevi forse fare un "Incolla" su tutte 4 ? cioè fai incolla su una e il testo viene scritto su tutte? scusami ma non riesco a capire cosa vuoi fare...
pensavo ti servisse avere un solo menu da mettere in tutte le RichTextBox che volevi e che faceva la stessa cosa pre tutte, dal codice sembrava facessi quello...

Fabiok89 Profilo | Newbie

Scs tanto avevo scritto male il codice che mi hai passato errore mio ti ringrazio infinitamente x l'haiuto...grazie ankora

u235 Profilo | Junior Member

Figurati...

ciao.

Fabiok89 Profilo | Newbie

un'altra cosa x inserire il taglia copia e elimina basta che cambio la fine del codice?

u235 Profilo | Junior Member

>>un'altra cosa x inserire il taglia copia e elimina basta che cambio la fine del codice?vorresti usare lo stesso metodo per tutte le voci di menù?

teoricamente si, ma non so se ti convenga...
in pratica basta controllare il nome del ToolStripItem per sapere quale è stato cliccato, e in base a quello stabilire cosa fare, sarebbe comodo perchè qualsiasi operazione fai la trovi nello stesso metodo, ma ti costringerebbe scrivere tutto dentro lo stesso metodo allungando il codice, sai la leggibilità... magari se fai dei metodi diversi per ogni operazione (passando il RichTextBox) e smisti dentro il metodo chiamato dal menu, allora si, così le stesse operazioni le puoi chiamare anche in altri modi (senza passare per i menù) e senza dover passare altri parametri (tipo sender o eventargs).

Il codice sorgente non è stato renderizzato qui
perchè non c'è sufficiente spazio.
Clicca qui per visualizzarlo in una nuova finestra

Fabiok89 Profilo | Newbie

lo so che rompo le scatole...ma sotto copi inserisco RichTextBox.Text = Clipboard.SetText() ma mi dice che nn è accessibile...

scs la mia ignoranza ma tu hai messo tutto sotto

Private Sub ToolStripMenuItem1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ToolStripMenuItem1.Click, ToolStripMenuItem2.Click

end sub

questo nn vuol dire che mi fa quella determinata cosa quando dal mio menu clicc il nome associato a ToolStripMenuItem1...Ps ve vuoi ti do il mio contatto msn

u235 Profilo | Junior Member

Chi/cosa non è accessibile?

Fabiok89 Profilo | Newbie

mi da questi errori


1440x900 175Kb

u235 Profilo | Junior Member

Partiamo dal concetto che per copiare e tagliare, si deve avere selezionato necessariamente qualcosa, se no cosa tagli/copi? poi, nell'incollare, devi tenere presente se l'utente ha selezionato qualcosa, se no incolli in coda e NON SOSTITUISCI ciò che c'è già,per sostituire tutto con incolla devi lasciare selezionare tutto (o dall'utente oppure da codice con un menuItem tipo "seleziona tutto" e usando la funzione RichTextBox.SelectAll()), per eliminare, potresti vedere se c'è selezionato qualcosa, se si, allora cancelli SOLO quel qualcosa, se no potresti cancellare tutto.
Detto questo, dovresti inquadrare un pochino l'utilizzo dei metodi che fai, ad esempio : se usi la clipBoard per leggere gli appunti copiati, allora giustamente dovresti aspettarti qualcosa come valore di ritorno (si chiamano Function in vb quando restituiscono qualcosa), se invece stai "impostando" qualcosa, come nel caso degli appunti in ClipBoad (copia), molto raramente c'è un valore di ritorno, a meno chè non sia ad esempio un boolean che ti dice se l'operazione è andata a buon fine, ma in genere si tratta di Sub (metodi che non restituiscono nessun valore), è il caso di ClipBoad.SetText, infatti li devi passare alla sub una stringa ("ClipBoad.SetText("testo da copiare")" e non "RichTextBox.Text = ClipBoad.SetText"), che è quella da copiare. Idem per ClipBoard.Clear() non aspettare che ti restituisca un valore, ti cancella tutto dagli appunti (NON dalla RichTextBox)...


comunque oltre questo, ti consiglio di usare i metodi che offre la RichTextBox, tipo cut(), Copy(), Paste() piuttosto che farli con ClipBoard, perchè sono già compresi di controllo per la selezione del testo...

Fabiok89 Profilo | Newbie

non ci ho capito nulla kmq ci sn riuscito adesso mi manca solo il tasto cancella

u235 Profilo | Junior Member

Una mano a scrivere il codice no, quello devi farlo tu... è chiaro che stai realizzando un programma a scopo didattico (che ne faresti di 4 righe di codice diversamente? le vendi?!!! ahahah), a meno che non sei uno di quesi ragazzini (a volte solo nel cervello, sai quelli stupidi che non hanno capito nulla della vita?) che si divertono così, comunque, non sarebbe per nulla utile che ti scrivessi il codice, a meno che non serva a mostrarti degli esempi, oppure, in casi estremi, dare una piccola parte di aiuto... ma di base no, non impareresti nulla, sopratutto se commetti degli errori abbastanza gravi come quelli, non prendertela, ma tutti abbiamo iniziato con degli errori più o meno gravi, e spesso continuamo pure a farli! magari non come quelli che stai commettendo tu ma ... motivo per cui, ti rimando a vedere le basi della programmazione perchè sul forum non credo sia il posto giusto, cerca una buona guida, su google ne trovi tantissime. Poi se c'è qualcosa che non hai capito, allora domanda pure, ma non chiedere le basi, quelle le devi conoscere.

senza offesa, ma lo dico per te :)

ciao.

Fabiok89 Profilo | Newbie

ok sn riuscito a sistemare il tutto tranne il tasto "CANCELLA" che mi cancella tutto..e a me serve che cancella solo quello evidenziato...grazie di tutto come hai detto tu procedo a tentativi

u235 Profilo | Junior Member

Bene :) vedo con piacere che non ti sei offeso.
Il testo selezionato lo trovi dentro la proprietà SelectedText di RichTextBox, e come valore li puoi dare una stringa vuota (String.Empty), cancellando di fatto il testo contenuto in esso.

ciao.

Fabiok89 Profilo | Newbie

rieccomi a chiedere un suggerimento...dopo vari temtativi sn riuscito a selezionare il testo e cancellarlo ma se seleziona dalla fine delle frase vesro sinistra mi seleziona in automatico tutta la parola...se invece x esempio seleziona dalla penultima lettera posso selezionare i caratteri che mi interessano...qualke consiglio?
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2017
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5