¿Alguien sabe cómo puedo cambiar el tamaño de un winform cuando no tiene borde? No quiero el borde predeterminado que tiene Windows, así que cambié la propiedad "FormBorderStyle" a "None". Esto eliminó el borde, aunque ahora no se puede cambiar el tamaño. He descubierto cómo mover el formulario, solo necesito saber cómo redimensionarlo.Cómo mover y cambiar el tamaño de un formulario sin un borde?
Respuesta
algunos ejemplos de código que permiten el movimiento y cambiar el tamaño de la forma:
public partial class Form1 : Form {
public Form1() {
InitializeComponent();
this.FormBorderStyle = FormBorderStyle.None;
this.DoubleBuffered = true;
this.SetStyle(ControlStyles.ResizeRedraw, true);
}
private const int cGrip = 16; // Grip size
private const int cCaption = 32; // Caption bar height;
protected override void OnPaint(PaintEventArgs e) {
Rectangle rc = new Rectangle(this.ClientSize.Width - cGrip, this.ClientSize.Height - cGrip, cGrip, cGrip);
ControlPaint.DrawSizeGrip(e.Graphics, this.BackColor, rc);
rc = new Rectangle(0, 0, this.ClientSize.Width, cCaption);
e.Graphics.FillRectangle(Brushes.DarkBlue, rc);
}
protected override void WndProc(ref Message m) {
if (m.Msg == 0x84) { // Trap WM_NCHITTEST
Point pos = new Point(m.LParam.ToInt32());
pos = this.PointToClient(pos);
if (pos.Y < cCaption) {
m.Result = (IntPtr)2; // HTCAPTION
return;
}
if (pos.X >= this.ClientSize.Width - cGrip && pos.Y >= this.ClientSize.Height - cGrip) {
m.Result = (IntPtr)17; // HTBOTTOMRIGHT
return;
}
}
base.WndProc(ref m);
}
}
Si quita el borde, también elimina la funcionalidad incorporada para cambiar el tamaño del marco. Hay formas de evitarlo, pero tendría que crear su propia funcionalidad para arrastrar y cambiar el tamaño del borde.
Tome un vistazo aquí:
(elaboración: en el comentario 2)
Redimensionar "Formulario "From All place And Move it >>> Código completo < < < < <
// Primero au la mayoría para añadir esta clase
class ReSize
{
private bool Above, Right, Under, Left, Right_above, Right_under, Left_under, Left_above;
int Thickness=6; //Thickness of border u can cheang it
int Area = 8; //Thickness of Angle border
/// <summary>
/// Constructor
/// </summary>
/// <param name="thickness">set thickness of form border</param>
public ReSize(int thickness)
{
Thickness = thickness;
}
/// <summary>
/// Constructor set thickness of form border=1
/// </summary>
public ReSize()
{
Thickness = 10;
}
//Get Mouse Position
public string getMosuePosition(Point mouse, Form form)
{
bool above_underArea = mouse.X > Area && mouse.X < form.ClientRectangle.Width - Area; /* |\AngleArea(Left_Above)\(=======above_underArea========)/AngleArea(Right_Above)/| */ //Area===>(==)
bool right_left_Area = mouse.Y > Area && mouse.Y < form.ClientRectangle.Height - Area;
bool _Above=mouse.Y <= Thickness; //Mouse in Above All Area
bool _Right= mouse.X >= form.ClientRectangle.Width - Thickness;
bool _Under=mouse.Y >= form.ClientRectangle.Height - Thickness;
bool _Left=mouse.X <= Thickness;
Above = _Above && (above_underArea); if (Above) return "a"; /*Mouse in Above All Area WithOut Angle Area */
Right = _Right && (right_left_Area); if (Right) return "r";
Under = _Under && (above_underArea); if (Under) return "u";
Left = _Left && (right_left_Area); if (Left) return "l";
Right_above =/*Right*/ (_Right && (!right_left_Area)) && /*Above*/ (_Above && (!above_underArea)); if (Right_above) return "ra"; /*if Mouse Right_above */
Right_under =/* Right*/((_Right) && (!right_left_Area)) && /*Under*/(_Under && (!above_underArea)); if (Right_under) return "ru"; //if Mouse Right_under
Left_under = /*Left*/((_Left) && (!right_left_Area)) && /*Under*/ (_Under && (!above_underArea)); if (Left_under) return "lu"; //if Mouse Left_under
Left_above = /*Left*/((_Left) && (!right_left_Area)) && /*Above*/(_Above && (!above_underArea)); if (Left_above) return "la"; //if Mouse Left_above
return "";
}
}
forman entonces cs
public partial class FormGDI : Form
{
ReSize resize = new ReSize(); // ReSize Class "/\" To Help Resize Form <None Style>
public FormGDI()
{
InitializeComponent();
this.SetStyle(ControlStyles.ResizeRedraw, true);
}
private const int cGrip = 16; // Grip size
private const int cCaption = 32; // Caption bar height;
protected override void OnPaint(PaintEventArgs e)
{
//this if you want to draw (if)
Color theColor = Color.FromArgb(10, 20, 20, 20);
theColor = Color.DarkBlue;
int BORDER_SIZE = 4;
ControlPaint.DrawBorder(e.Graphics, ClientRectangle,
theColor, BORDER_SIZE, ButtonBorderStyle.Dashed,
theColor, BORDER_SIZE, ButtonBorderStyle.Dashed,
theColor, BORDER_SIZE, ButtonBorderStyle.Dashed,
theColor, BORDER_SIZE, ButtonBorderStyle.Dashed);
Rectangle rc = new Rectangle(this.ClientSize.Width - cGrip, this.ClientSize.Height - cGrip, cGrip, cGrip);
ControlPaint.DrawSizeGrip(e.Graphics, this.BackColor, rc);
rc = new Rectangle(0, 0, this.ClientSize.Width, cCaption);
e.Graphics.FillRectangle(Brushes.DarkBlue, rc);
base.OnPaint(e);
}
//set MinimumSize to Form
public override Size MinimumSize
{
get
{
return base.MinimumSize;
}
set
{
base.MinimumSize = new Size(179, 51);
}
}
//
//override WndProc
//
protected override void WndProc(ref Message m)
{
//****************************************************************************
int x = (int)(m.LParam.ToInt64() & 0xFFFF); //get x mouse position
int y = (int)((m.LParam.ToInt64() & 0xFFFF0000) >> 16); //get y mouse position you can gave (x,y) it from "MouseEventArgs" too
Point pt = PointToClient(new Point(x, y));
if (m.Msg == 0x84)
{
switch (resize.getMosuePosition(pt, this))
{
case "l": m.Result = (IntPtr)10; return; // the Mouse on Left Form
case "r": m.Result = (IntPtr)11; return; // the Mouse on Right Form
case "a": m.Result = (IntPtr)12; return;
case "la": m.Result = (IntPtr)13; return;
case "ra": m.Result = (IntPtr)14; return;
case "u": m.Result = (IntPtr)15; return;
case "lu": m.Result = (IntPtr)16; return;
case "ru": m.Result = (IntPtr)17; return; // the Mouse on Right_Under Form
case "": m.Result = pt.Y < 32 /*mouse on title Bar*/ ? (IntPtr)2 : (IntPtr)1; return;
}
}
base.WndProc(ref m);
}
}
¿Puedes explicar cómo responde esto a la pregunta? ¡Gracias! – DanM7
elabora: primera clase de cambio de tamaño de id tiene un método este método para determinar la posición del formulario de ratón calcular ('punto de mouse') y (' Formulario') para obtener ancho y alto de forma y la más importante 'WndProc' Anular El método de este método tiene 'ref Message m' param cuando' m.msg = 0x84'value puede establecer m.result = 10 que significa que usted llama 'form' para cambiar el tamaño desde la izquierda y' m.Result = 11' call 'form' desde la derecha y .... hasta 17, pero cuando 'm.Result = 2 llamas para mover la 'forma' y cuando' m.Result = 1'que significa llamar 'no hacer nada ' – NourAldienArabian
te ayuda, pero no admite el desplazamiento, crea nuevas "líneas" de borde a través del formulario al desplazarse – CularBytes
Aquí hay un ejemplo completo de una forma personalizada con los 8 puntos de cambio de tamaño:
public partial class Form1 : Form {
public Form1() {
InitializeComponent();
this.FormBorderStyle = FormBorderStyle.None; // no borders
this.DoubleBuffered = true;
this.SetStyle(ControlStyles.ResizeRedraw, true); // this is to avoid visual artifacts
}
protected override void OnPaint(PaintEventArgs e) // you can safely omit this method if you want
{
e.Graphics.FillRectangle(Brushes.Green, Top);
e.Graphics.FillRectangle(Brushes.Green, Left);
e.Graphics.FillRectangle(Brushes.Green, Right);
e.Graphics.FillRectangle(Brushes.Green, Bottom);
}
private const int
HTLEFT = 10,
HTRIGHT = 11,
HTTOP = 12,
HTTOPLEFT = 13,
HTTOPRIGHT = 14,
HTBOTTOM = 15,
HTBOTTOMLEFT = 16,
HTBOTTOMRIGHT = 17;
const int _ = 10; // you can rename this variable if you like
Rectangle Top { get { return new Rectangle(0, 0, this.ClientSize.Width, _); } }
Rectangle Left { get { return new Rectangle(0, 0, _, this.ClientSize.Height); } }
Rectangle Bottom { get { return new Rectangle(0, this.ClientSize.Height - _, this.ClientSize.Width, _); } }
Rectangle Right { get { return new Rectangle(this.ClientSize.Width - _, 0, _, this.ClientSize.Height); } }
Rectangle TopLeft { get { return new Rectangle(0, 0, _, _); } }
Rectangle TopRight { get { return new Rectangle(this.ClientSize.Width - _, 0, _, _); } }
Rectangle BottomLeft { get { return new Rectangle(0, this.ClientSize.Height - _, _, _); } }
Rectangle BottomRight { get { return new Rectangle(this.ClientSize.Width - _, this.ClientSize.Height - _, _, _); } }
protected override void WndProc(ref Message message)
{
base.WndProc(ref message);
if (message.Msg == 0x84) // WM_NCHITTEST
{
var cursor = this.PointToClient(Cursor.Position);
if (TopLeft.Contains(cursor)) message.Result = (IntPtr)HTTOPLEFT;
else if (TopRight.Contains(cursor)) message.Result = (IntPtr)HTTOPRIGHT;
else if (BottomLeft.Contains(cursor)) message.Result = (IntPtr)HTBOTTOMLEFT;
else if (BottomRight.Contains(cursor)) message.Result = (IntPtr)HTBOTTOMRIGHT;
else if (Top.Contains(cursor)) message.Result = (IntPtr)HTTOP;
else if (Left.Contains(cursor)) message.Result = (IntPtr)HTLEFT;
else if (Right.Contains(cursor)) message.Result = (IntPtr)HTRIGHT;
else if (Bottom.Contains(cursor)) message.Result = (IntPtr)HTBOTTOM;
}
}}
"Sizer" es el panel de color azul claro en la esquina inferior derecha enter image description here
int Mx;
int My;
int Sw;
int Sh;
bool mov;
void SizerMouseDown(object sender, MouseEventArgs e)
{
mov = true;
My = MousePosition.Y;
Mx = MousePosition.X;
Sw = Width;
Sh = Height;
}
void SizerMouseMove(object sender, MouseEventArgs e)
{
if (mov == true) {
Width = MousePosition.X - Mx + Sw;
Height = MousePosition.Y - My + Sh;
}
}
void SizerMouseUp(object sender, MouseEventArgs e)
{
mov = false;
}
- 1. Mover formulario sin estilo de borde
- 2. Javascript - Cambiar el ancho del borde sin mover elementos circundantes.
- 3. Cambiar un color de borde en un formulario de Windows
- 4. Cambiar el lado de un jScrollPane y cambiar el tamaño
- 5. cambiar el tamaño y ajustar los controles de formulario según el tamaño del formulario
- 6. JQuery borde animado sin mover div
- 7. Cambiar un borde JMenuBar
- 8. SWT: ¿Cómo crear un grupo sin borde?
- 9. ¿Cómo crear mover/cambiar el tamaño de animaciones en Android?
- 10. ¿Cómo cambiar el tamaño de un UISwitch?
- 11. Reanudar un svn mover/cambiar el nombre
- 12. Agregue un icono de borde al formulario
- 13. Mover texto en un div sin mover el div
- 14. Cómo permitir al usuario mover un control en el formulario
- 15. ¿Cómo cambiar el tamaño y guardar un Texture2D en XNA?
- 16. Cambiar el fondo de un Formulario MDI
- 17. No se puede arrastrar y mover un formulario WPF
- 18. Cómo cambiar el color del borde (o eliminar el borde) de un control PropertyGrid?
- 19. Deshabilitar el cambio de tamaño de un formulario de Windows
- 20. Cómo mover el borde de un div "hacia arriba" un píxel con css
- 21. Cómo crear un formulario con un borde, pero sin barra de título? (como el control de volumen en Windows 7)
- 22. Cambiar el tamaño de paneles en GUI sin cambiar el tamaño de los contenidos (MATLAB)
- 23. Cambiar el tamaño de mi frontera cuando un verticalScrollBar aparece
- 24. WPF/XAML: ¿Cómo dimensiono una ventana sin borde?
- 25. Girar imagen * sin * cambiar el tamaño
- 26. ¿Cómo rellenar un div sin extender el borde?
- 27. Cómo cambiar el tamaño de imagen UIBarButtonItem
- 28. Disminuir el tamaño de un formulario de ventana
- 29. ¿Cómo puedo cambiar el tamaño de una imagen sin estirarla?
- 30. CarrierWave y cambiar el tamaño a un ancho específico
como no recibo una fea barra azul en la parte superior. – C4u
Tal vez te gusten los Brushes.Chartreuse better. El estilo es, por supuesto, totalmente de usted, más bien el punto de escribir código como este. Si no quieres ocuparte de eso, no te preocupes por las ventanas sin bordes. O contrata a un diseñador. –
No hay necesidad de ser grosero. Havnt visto que hay un pincel insertado con ese color. Podría haber agregado esta información a su pregunta en lugar de solo copiar y pegar. Gracias de cualquier manera. Lo tengo arreglado con el color del pincel. – C4u