Создание пользовательского Picturebox с перетаскиваемым окном выбора с возможностью изменения размера: Повторное открытиC#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 Создание пользовательского Picturebox с перетаскиваемым окном выбора с возможностью изменения размера: Повторное открыти

Сообщение Anonymous »

Я нашел принятый ответ @RezaAghaei в:

Создание пользовательского Picturebox с перетаскиваемым окном выбора с возможностью изменения размера

и он работает отлично.
Однако работает только событие Resize. Никакое другое событие не работает.
Я использую его для другой цели. Моя цель — добавить несколько пользовательских элементов управления в PictureBox. Когда пользователь нажимает на любой из них, отображаются свойства UserControl, такие как имя, путь к изображению, размер и т. д.
Полный код приведен ниже. Интересно, работает только событие Resize.

Код: Выделить всё

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;
}
}
}
Я пробовал многое, но не смог вызвать событие Click или любое другое событие.

Поделитесь решением или любой другой ссылкой , опубликуйте, где я выполняю свое требование.

Подробнее здесь: https://stackoverflow.com/questions/793 ... indow-case
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C#»