如何判断ListView控件 右击了 Column

aierduo 2007-01-29 07:00:28
如题
...全文
239 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
aierduo 2007-01-29
  • 打赏
  • 举报
回复
谢谢
有没有简单一点的
王集鹄 2007-01-29
  • 打赏
  • 举报
回复
//比我想象的复杂多了
//如果楼主觉得满意的话别忘记多加几分 :)
//参考如下代码:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Runtime.InteropServices;

namespace WindowsApplication14
{
public struct NMHDR
{
public IntPtr hwndFrom;
public uint idFrom;
public int code;
}
public struct HDHITTESTINFO
{
public Point pt;
public uint flags;
public int iItem;
};

public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
#region API接口 设计 ZswangY37 2007-01-29
private WndProcDelegate wndProcDelegate;
private IntPtr oldWndFunc;
private delegate IntPtr WndProcDelegate(IntPtr hwnd, int Msg, IntPtr wParam, ref NMHDR lParam);
private const int GWL_WNDPROC = -4;
[DllImport("User32.dll")]
private static extern IntPtr SetWindowLong(IntPtr hWnd, int nIndex, WndProcDelegate wndProcDelegate);
[DllImport("User32.dll")]
private static extern IntPtr SetWindowLong(IntPtr hWnd, int nIndex, IntPtr wndFunc);
[DllImport("User32.dll")]
private static extern IntPtr CallWindowProc(IntPtr prevWndFunc, IntPtr hWnd, int iMsg, IntPtr wParam, ref NMHDR lParam);
[DllImport("User32.DLL")]
private static extern IntPtr SendMessage(IntPtr hWnd, uint Msg, int wParam, int iParam);
[DllImport("User32.DLL")]
private static extern IntPtr SendMessage(IntPtr hWnd, uint Msg, int wParam, ref HDHITTESTINFO iParam);
[DllImport("User32.DLL")]
private static extern bool ScreenToClient(IntPtr hWnd, ref Point lpPoint);
private IntPtr wndColumnHeader;
private const uint LVM_FIRST = 0x1000;
private const uint LVM_GETHEADER = LVM_FIRST + 31;
private const int WM_NOTIFY = 0x004E;
private const int NM_FIRST = 0;
private const int HDM_FIRST = 0x1200;
private const int NM_RCLICK = NM_FIRST - 5;
private const int HDM_HITTEST = HDM_FIRST + 6;
private IntPtr ListViewWndProc(IntPtr hWnd, int Msg, IntPtr wParam, ref NMHDR lParam)
{
switch (Msg)
{
case WM_NOTIFY:
if (lParam.hwndFrom == wndColumnHeader)
switch(lParam.code)
{
case NM_RCLICK:
Point vPoint = new Point(MousePosition.X, MousePosition.Y);
ScreenToClient(wndColumnHeader, ref vPoint);
HDHITTESTINFO vTestInfo = new HDHITTESTINFO();
vTestInfo.flags = 0;
vTestInfo.iItem = 0;
vTestInfo.pt = vPoint;
SendMessage(wndColumnHeader, HDM_HITTEST, 0, ref vTestInfo);
Text = vTestInfo.iItem.ToString();
break;
}
break;
}
return CallWindowProc(oldWndFunc, hWnd, Msg, wParam, ref lParam);
}
#endregion

private void Form1_Load(object sender, EventArgs e)
{
wndColumnHeader = SendMessage(listView1.Handle, LVM_GETHEADER, 0, 0);
wndProcDelegate = new WndProcDelegate(ListViewWndProc);
oldWndFunc = SetWindowLong(listView1.Handle, GWL_WNDPROC, wndProcDelegate);
}

private void Form1_FormClosed(object sender, FormClosedEventArgs e)
{
SetWindowLong(listView1.Handle, GWL_WNDPROC, oldWndFunc);
oldWndFunc = IntPtr.Zero;
}
}
}
liu2002081319 2007-01-29
  • 打赏
  • 举报
回复
恩,固定Column 的高度和宽度,拿到e的点击位置坐标,进行比较,可以确定,比较极端。。。。。
superxiaomm 2007-01-29
  • 打赏
  • 举报
回复
这个啊,要复写defwinproc,有一个WM_PARENTNOTIFY消息,捕获这个消息就可以了。前提是你用一个类继承一下listview,复写listview的defwinproc

2)用WM_NOTIFY,这个要思路也是一样,不过不用继承了,直接在winform里面写

象private void listView1_MouseClick(object sender, MouseEventArgs e)
{
if (e.Button == MouseButtons.Right)
{
MessageBox.Show("right");
}
}
是拿不到的
3)变态的方法,应为colum的高度是固定的22,所以。。。。你可以自己作判断拉
aierduo 2007-01-29
  • 打赏
  • 举报
回复
好的
回家后再看谢谢
王集鹄 2007-01-29
  • 打赏
  • 举报
回复
先顶,我现在再写代码
aierduo 2007-01-29
  • 打赏
  • 举报
回复
自己顶
liu2002081319 2007-01-29
  • 打赏
  • 举报
回复
this.listView1.MouseClick += new System.Windows.Forms.MouseEventHandler(this.listView1_MouseClick);
private void listView1_MouseClick(object sender, MouseEventArgs e)
{
if (e.Button == MouseButtons.Right)
{
MessageBox.Show("right");
}
}
内容概要:本文系统研究了在有限控制集约束下,三相并网逆变器中电流与功率双模态模型预测控制(MPC)的等效机理及其性能边界。通过构建精确的预测模型,设计合理的代价函数,并结合Simulink仿真与Matlab代码实现,深入分析了电流预测控制与功率预测控制两种策略在动态响应速度、稳态精度、谐波抑制能力和抗扰性等方面的差异与内在联系。研究揭示了在特定系统参数和运行条件下,两种控制模式之间的等效转化机制,并界定了各自的适用范围与性能极限。同时,探讨了多模态控制的切换逻辑、实时性优化及预测模型不确定性对控制性能的影响,旨在提升逆变器在复杂电网环境下的综合控制品质与鲁棒性。; 适合人群:具备电力电子、自动控制或新能源并网等相关专业背景,熟悉Matlab/Simulink仿真环境,从事研究生及以上层次科研或从事高端电力电子装备研发的工程技术人员。; 使用场景及目标:①深入理解模型预测控制在并网逆变器中的具体实现方法与理论基础;②掌握电流与功率双模态MPC控制器的设计、仿真建模与性能对比评估流程;③为高动态、高精度并网控制系统的方案选型、参数优化与工程化应用提供坚实的理论依据和技术参考。; 阅读建议:建议结合所提供的Simulink仿真模型与Matlab源代码进行同步实验验证,重点关注预测模型的建立过程、控制律的数学推导以及不同工况下的仿真结果对比分析,宜配合现代控制理论、电力电子变换技术及并网标准等相关资料进行系统性学习。

111,129

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Creator Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧