ControlPaint.DrawReversibleFrame(Rectangle, Color, FrameStyle) Metodo
Definizione
Importante
Alcune informazioni sono relative alla release non definitiva del prodotto, che potrebbe subire modifiche significative prima della release definitiva. Microsoft non riconosce alcuna garanzia, espressa o implicita, in merito alle informazioni qui fornite.
Disegna un frame reversibile sullo schermo all'interno dei limiti definiti, con il colore di sfondo specificato e nello stato determinato.
public:
static void DrawReversibleFrame(System::Drawing::Rectangle rectangle, System::Drawing::Color backColor, System::Windows::Forms::FrameStyle style);
public static void DrawReversibleFrame (System.Drawing.Rectangle rectangle, System.Drawing.Color backColor, System.Windows.Forms.FrameStyle style);
static member DrawReversibleFrame : System.Drawing.Rectangle * System.Drawing.Color * System.Windows.Forms.FrameStyle -> unit
Public Shared Sub DrawReversibleFrame (rectangle As Rectangle, backColor As Color, style As FrameStyle)
Parametri
- rectangle
- Rectangle
Oggetto Rectangle che rappresenta le dimensioni, secondo le coordinate dello schermo, del rettangolo da disegnare.
- style
- FrameStyle
Uno dei valori di FrameStyle che specifica lo stile del frame.
Esempio
Nell'esempio di codice seguente viene illustrato come usare i Control.RectangleToScreenmembri , Control.PointToScreene DrawReversibleFrame . Per eseguire l'esempio, incollare il codice seguente in una maschera denominata Form1
contenente diversi controlli. In questo esempio è necessario che gli eventi del mouse siano connessi ai gestori eventi definiti nell'esempio.
private:
// The following three methods will draw a rectangle and allow
// the user to use the mouse to resize the rectangle. If the
// rectangle intersects a control's client rectangle, the
// control's color will change.
bool isDrag;
Rectangle theRectangle;
Point startPoint;
void Form1_MouseDown( Object^ sender, System::Windows::Forms::MouseEventArgs^ e )
{
// Set the isDrag variable to true and get the starting point
// by using the PointToScreen method to convert form
// coordinates to screen coordinates.
if ( e->Button == ::MouseButtons::Left )
{
isDrag = true;
}
Control^ control = dynamic_cast<Control^>(sender);
// Calculate the startPoint by using the PointToScreen
// method.
startPoint = control->PointToScreen( Point(e->X,e->Y) );
}
void Form1_MouseMove( Object^ /*sender*/, System::Windows::Forms::MouseEventArgs^ e )
{
// If the mouse is being dragged,
// undraw and redraw the rectangle as the mouse moves.
if ( isDrag )
{
ControlPaint::DrawReversibleFrame( theRectangle, this->BackColor, FrameStyle::Dashed );
// Calculate the endpoint and dimensions for the new
// rectangle, again using the PointToScreen method.
Point endPoint = this->PointToScreen( Point(e->X,e->Y) );
int width = endPoint.X - startPoint.X;
int height = endPoint.Y - startPoint.Y;
theRectangle = Rectangle(startPoint.X,startPoint.Y,width,height);
// Draw the new rectangle by calling DrawReversibleFrame
// again.
ControlPaint::DrawReversibleFrame( theRectangle, this->BackColor, FrameStyle::Dashed );
}
}
void Form1_MouseUp( Object^ /*sender*/, System::Windows::Forms::MouseEventArgs^ /*e*/ )
{
// If the MouseUp event occurs, the user is not dragging.
isDrag = false;
// Draw the rectangle to be evaluated. Set a dashed frame style
// using the FrameStyle enumeration.
ControlPaint::DrawReversibleFrame( theRectangle, this->BackColor, FrameStyle::Dashed );
// Find out which controls intersect the rectangle and
// change their color. The method uses the RectangleToScreen
// method to convert the Control's client coordinates
// to screen coordinates.
Rectangle controlRectangle;
for ( int i = 0; i < Controls->Count; i++ )
{
controlRectangle = Controls[ i ]->RectangleToScreen( Controls[ i ]->ClientRectangle );
if ( controlRectangle.IntersectsWith( theRectangle ) )
{
Controls[ i ]->BackColor = Color::BurlyWood;
}
}
// Reset the rectangle.
theRectangle = Rectangle(0,0,0,0);
}
// The following three methods will draw a rectangle and allow
// the user to use the mouse to resize the rectangle. If the
// rectangle intersects a control's client rectangle, the
// control's color will change.
bool isDrag = false;
Rectangle theRectangle = new Rectangle(new Point(0, 0), new Size(0, 0));
Point startPoint;
private void Form1_MouseDown(object sender,
System.Windows.Forms.MouseEventArgs e)
{
// Set the isDrag variable to true and get the starting point
// by using the PointToScreen method to convert form
// coordinates to screen coordinates.
if (e.Button==MouseButtons.Left)
{
isDrag = true;
}
Control control = (Control) sender;
// Calculate the startPoint by using the PointToScreen
// method.
startPoint = control.PointToScreen(new Point(e.X, e.Y));
}
private void Form1_MouseMove(object sender,
System.Windows.Forms.MouseEventArgs e)
{
// If the mouse is being dragged,
// undraw and redraw the rectangle as the mouse moves.
if (isDrag)
// Hide the previous rectangle by calling the
// DrawReversibleFrame method with the same parameters.
{
ControlPaint.DrawReversibleFrame(theRectangle,
this.BackColor, FrameStyle.Dashed);
// Calculate the endpoint and dimensions for the new
// rectangle, again using the PointToScreen method.
Point endPoint = ((Control) sender).PointToScreen(new Point(e.X, e.Y));
int width = endPoint.X-startPoint.X;
int height = endPoint.Y-startPoint.Y;
theRectangle = new Rectangle(startPoint.X,
startPoint.Y, width, height);
// Draw the new rectangle by calling DrawReversibleFrame
// again.
ControlPaint.DrawReversibleFrame(theRectangle,
this.BackColor, FrameStyle.Dashed);
}
}
private void Form1_MouseUp(object sender,
System.Windows.Forms.MouseEventArgs e)
{
// If the MouseUp event occurs, the user is not dragging.
isDrag = false;
// Draw the rectangle to be evaluated. Set a dashed frame style
// using the FrameStyle enumeration.
ControlPaint.DrawReversibleFrame(theRectangle,
this.BackColor, FrameStyle.Dashed);
// Find out which controls intersect the rectangle and
// change their color. The method uses the RectangleToScreen
// method to convert the Control's client coordinates
// to screen coordinates.
Rectangle controlRectangle;
for(int i = 0; i < Controls.Count; i++)
{
controlRectangle = Controls[i].RectangleToScreen
(Controls[i].ClientRectangle);
if (controlRectangle.IntersectsWith(theRectangle))
{
Controls[i].BackColor = Color.BurlyWood;
}
}
// Reset the rectangle.
theRectangle = new Rectangle(0, 0, 0, 0);
}
' The following three methods will draw a rectangle and allow
' the user to use the mouse to resize the rectangle. If the
' rectangle intersects a control's client rectangle, the
' control's color will change.
Dim isDrag As Boolean = False
Dim theRectangle As New rectangle(New Point(0, 0), New Size(0, 0))
Dim startPoint As Point
Private Sub Form1_MouseDown(ByVal sender As Object, ByVal e As _
System.Windows.Forms.MouseEventArgs) Handles MyBase.MouseDown
' Set the isDrag variable to true and get the starting point
' by using the PointToScreen method to convert form coordinates to
' screen coordinates.
If (e.Button = MouseButtons.Left) Then
isDrag = True
End If
Dim control As Control = CType(sender, Control)
' Calculate the startPoint by using the PointToScreen
' method.
startPoint = control.PointToScreen(New Point(e.X, e.Y))
End Sub
Private Sub Form1_MouseMove(ByVal sender As Object, ByVal e As _
System.Windows.Forms.MouseEventArgs) Handles MyBase.MouseMove
' If the mouse is being dragged, undraw and redraw the rectangle
' as the mouse moves.
If (isDrag) Then
' Hide the previous rectangle by calling the DrawReversibleFrame
' method with the same parameters.
ControlPaint.DrawReversibleFrame(theRectangle, Me.BackColor, _
FrameStyle.Dashed)
' Calculate the endpoint and dimensions for the new rectangle,
' again using the PointToScreen method.
Dim endPoint As Point = CType(sender, Control).PointToScreen(New Point(e.X, e.Y))
Dim width As Integer = endPoint.X - startPoint.X
Dim height As Integer = endPoint.Y - startPoint.Y
theRectangle = New Rectangle(startPoint.X, startPoint.Y, _
width, height)
' Draw the new rectangle by calling DrawReversibleFrame again.
ControlPaint.DrawReversibleFrame(theRectangle, Me.BackColor, _
FrameStyle.Dashed)
End If
End Sub
Private Sub Form1_MouseUp(ByVal sender As Object, ByVal e As _
System.Windows.Forms.MouseEventArgs) Handles MyBase.MouseUp
' If the MouseUp event occurs, the user is not dragging.
isDrag = False
' Draw the rectangle to be evaluated. Set a dashed frame style
' using the FrameStyle enumeration.
ControlPaint.DrawReversibleFrame(theRectangle, Me.BackColor, _
FrameStyle.Dashed)
' Find out which controls intersect the rectangle and change their color.
' The method uses the RectangleToScreen method to convert the
' Control's client coordinates to screen coordinates.
Dim i As Integer
Dim controlRectangle As Rectangle
For i = 0 To Controls.Count - 1
controlRectangle = Controls(i).RectangleToScreen _
(Controls(i).ClientRectangle)
If controlRectangle.IntersectsWith(theRectangle) Then
Controls(i).BackColor = Color.BurlyWood
End If
Next
' Reset the rectangle.
theRectangle = New Rectangle(0, 0, 0, 0)
End Sub
Commenti
Il backColor
parametro viene usato per calcolare il colore di riempimento della cornice in modo che sia sempre visibile sullo sfondo.
I risultati di questo metodo possono essere invertiti disegnando di nuovo lo stesso frame. Il disegno di una cornice con questo metodo è simile all'inversione di un'area dello schermo, ad eccezione del fatto che offre prestazioni migliori per una varietà di colori più ampia.