Я нашел принятый ответ @rezaaghaei in:
Создание пользовательской картинки с помощью перетаскиваемого и изменяемого окна выбора
и он работает отлично. < /p>
Тем не менее, только событие Resisize работает. Никакое другое событие не работает. < /P>
Я использую его для другой цели. Моя цель - добавить несколько пользовательских элементов управления на PictureBox. Когда пользователь нажимает на любой, он отображает свойства usercontrol, такие как имя, путь изображения, размер и многое другое. < /P>
Полный код приведен ниже. Удивительно только событие Resisize работает.
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Globalization;
using System.IO;
using System.Linq;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Security;
using System.Text;
using System.Threading.Tasks;
using Microsoft.VisualBasic;
public class userControlAddImage : UserControl
{
// Constructor to set some default properties
public userControlAddImage()
{
this.BackgroundImage = Image.FromFile(@"D:\UserImportant\Desktop\New folder (8)\29927.jpg");
this.BackgroundImageLayout = ImageLayout.Zoom;
this.BorderStyle = BorderStyle.FixedSingle;
}
private void userControlAddImage_Click(object sender, EventArgs e)
{
MessageBox.Show("User Control clicked!");
}
private void userControlAddImage_DoubleClick(object sender, EventArgs e)
{
MessageBox.Show("User Control userControlAddImage_DoubleClick!");
}
private void userControlAddImage_Enter(object sender, EventArgs e)
{
MessageBox.Show("User Control userControlAddImage_Enter!");
}
private void userControlAddImage_MouseEnter(object sender, EventArgs e)
{
MessageBox.Show("User Control userControlAddImage_MouseEnter!");
}
private void userControlAddImage_Resize(object sender, EventArgs e)
{
MessageBox.Show("User Control userControlAddImage_Resize!");
}
const int WM_NCHITTEST = 0x84;
const int WM_SETCURSOR = 0x20;
const int WM_NCLBUTTONDBLCLK = 0xA3;
protected override void WndProc(ref Message m)
{
var borderWidth = 10;
if (m.Msg == WM_SETCURSOR)
{
if ((m.LParam.ToInt32() & 0xFFFF) == 0x2)
{
Cursor.Current = Cursors.SizeAll;
m.Result = (IntPtr)1;
return;
}
}
if (m.Msg == WM_NCLBUTTONDBLCLK)
{
m.Result = (IntPtr)1;
return;
}
base.WndProc(m);
if (m.Msg == WM_NCHITTEST)
{
var pos = PointToClient(new Point(m.LParam.ToInt32() & 0xFFFF, m.LParam.ToInt32() >> 16));
if (pos.X = ClientRectangle.Bottom - borderWidth)
m.Result = new IntPtr(17); // BOTTOMRIGHT
else if (pos.X = ClientRectangle.Bottom - borderWidth)
m.Result = new IntPtr(15); // Bottom
else
m.Result = new IntPtr(2); // Move
}
}
protected override CreateParams CreateParams
{
get
{
CreateParams cp = base.CreateParams;
cp.ExStyle = cp.ExStyle | 0x2000000; // Turn on WS_EX_COMPOSITED
return cp;
}
}
}
< /code>
Я пробовал много вещей, но не удалось запустить событие Click < /code> или любое другое событие.
Пожалуйста, поделитесь решением или любой другой ссылкой , сообщение, где я выполняю свое требование.
Подробнее здесь: https://stackoverflow.com/questions/793 ... indow-case
Создание пользовательского изображения с перетаскиваемым и резализируемым окном выбора: Case Repeen ⇐ C#
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение