天道酬勤,学无止境

任何TControl的下拉菜单(Drop down menu for any TControl)

问题

继续本主题:

TButton的下拉菜单

我已经写了下拉菜单是与任何一个通用代码TControl ,但由于某些原因,它的剂量预期与不工作TPanel

var
  TickCountMenuClosed: Cardinal = 0;
  LastPopupControl: TControl;

type
  TDropDownMenuHandler = class
  public
    class procedure MouseDown(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
  end;                            
  TControlAccess = class(TControl);

class procedure TDropDownMenuHandler.MouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
  if LastPopupControl <> Sender then Exit;
  if (Button = mbLeft) and not ((TickCountMenuClosed + 100) < GetTickCount) then
  begin
    if GetCapture <> 0 then SendMessage(GetCapture, WM_CANCELMODE, 0, 0);
    ReleaseCapture;
    // SetCapture(0);
    if Sender is TGraphicControl then Abort;
  end;
end;

procedure RegisterControlDropMenu(Control: TControl; PopupMenu: TPopupMenu);
begin
  TControlAccess(Control).OnMouseDown := TDropDownMenuHandler.MouseDown;
end;

procedure DropMenuDown(Control: TControl; PopupMenu: TPopupMenu);
var
  APoint: TPoint;
begin
  LastPopupControl := Control;
  RegisterControlDropMenu(Control, PopupMenu);
  APoint := Control.ClientToScreen(Point(0, Control.ClientHeight));
  PopupMenu.PopupComponent := Control;
  PopupMenu.Popup(APoint.X, APoint.Y);
  TickCountMenuClosed := GetTickCount;
end;

据我TSpeedButton ,这与TButtonTSpeedButton以及任何TGraphicControl (如TImageTSpeedButton等)配合使用都TGraphicControl

TPanel无法与TPanel一起TPanel

procedure TForm1.Button1Click(Sender: TObject);
begin
  DropMenuDown(Sender as TControl, PopupMenu1);
end;

procedure TForm1.Panel1Click(Sender: TObject);
begin
  DropMenuDown(Sender as TControl, PopupMenu1); // Does not work!
end;

procedure TForm1.SpeedButton1Click(Sender: TObject);
begin
  DropMenuDown(Sender as TControl, PopupMenu1);
end;

procedure TForm1.Image1Click(Sender: TObject);
begin
  DropMenuDown(Sender as TControl, PopupMenu1);
end;

似乎TPanel不尊重TPanel ReleaseCapture; 甚至在事件TDropDownMenuHandler.MouseDownAbort 。 我该怎么做才能使TPanel和其他控件TPanel ? 我想念什么?

回答1

这并不是说TPanel不尊重ReleaseCapture ,它是捕捉一点都不重要。 这是启动弹出菜单并处于活动状态,然后再次单击控件后发生的情况:

  • 单击可取消模式菜单循环,关闭菜单并显示鼠标按下消息。
  • VCL在鼠标按下消息处理[csClicked]设置一个标志。
  • 触发鼠标按下事件处理程序,然后释放捕获。
  • 返回鼠标按下消息后,将处理发布的鼠标按下消息,VCL检查该标志并单击控件(如果已设置)。
  • 单击处理程序将弹出菜单。

当然,我没有找到有效的示例,所以我无法确定何时以及如何对ReleaseCapture有所帮助。 无论如何,这无济于事。


我建议的解决方案与当前设计略有不同。

我们想要的是第二次点击,以不引起点击。 参见代码的这一部分:

procedure DropMenuDown(Control: TControl; PopupMenu: TPopupMenu);
var
  APoint: TPoint;
begin
  ...
  PopupMenu.PopupComponent := Control;
  PopupMenu.Popup(APoint.X, APoint.Y);
  TickCountMenuClosed := GetTickCount;
end;

实际上,第二次单击将关闭菜单,然后再通过同一处理程序再次启动菜单。 这是导致PopupMenu.Popup调用返回的原因。 因此,我们在这里可以说是单击了鼠标按钮(左按钮或双击),但VCL尚未对其进行处理。 这意味着消息尚未在队列中。

使用这种方法,不需要注册机制(鼠标向下处理程序黑客),不需要它,因此不需要类本身,以及全局变量。

procedure DropMenuDown(Control: TControl; PopupMenu: TPopupMenu);
var
  APoint: TPoint;
  Msg: TMsg;
  Wnd: HWND;
  ARect: TRect;
begin
  APoint := Control.ClientToScreen(Point(0, Control.ClientHeight));
  PopupMenu.PopupComponent := Control;
  PopupMenu.Popup(APoint.X, APoint.Y);

  if (Control is TWinControl) then
    Wnd := TWinControl(Control).Handle
  else
    Wnd := Control.Parent.Handle;
  if PeekMessage(Msg, Wnd, WM_LBUTTONDOWN, WM_LBUTTONDBLCLK, PM_NOREMOVE) then begin
    ARect.TopLeft := Control.ClientOrigin;
    ARect.Right := ARect.Left + Control.Width;
    ARect.Bottom := ARect.Top + Control.Height;
    if PtInRect(ARect, Msg.pt) then
      PeekMessage(Msg, Wnd, WM_LBUTTONDOWN, WM_LBUTTONDBLCLK, PM_REMOVE);
  end;
end;


另外,这不取决于处理时间。

回答2

要求

如果我对您的理解正确,那么要求是:

  1. 在鼠标的第一个左键单击控件,在控件下方应显示一个PopupMenu。
  2. 在第二个鼠标左键单击相同的控件,应关闭显示的PopupMenu。

意识到,暂时不考虑需求1的实现,需求2会自动发生:当您在PopupMenu外部单击时,PopupMenu将关闭。 由此得出结论,第一种方法的实施不应干扰第二种方法。

可能的解决方案:

  • 计算控件上的单击次数:第一次单击时,显示PopupMenu,而在第二次单击时,不执行任何操作。 但这是行不通的,因为PopupMenu可能已经被其他地方的单击关闭,然后第二次单击实际上应该是第一次单击。
  • 第一次单击时,显示PopupMenu。 在第二次单击时,确定是否仍显示PopupMenu。 如果是这样,则什么都不做。 否则,请先单击一下。 这也将不起作用,因为在处理第二次单击时,PopupMenu将已经关闭。
  • 第一次单击时,显示PopupMenu。 在第二次单击时,确定在最后几毫秒内某个时间是否关闭了PopupMenu。 如果是这样,则消失是由于第二次单击而无所作为。 这是您目前正在使用的解决方案,它利用了以下事实: TPopupMenu.Popup在PopupMenu关闭之前不会返回。

目前的实施

  1. 在控件的OnClick事件中:
    • 控件的OnMouseDown事件已分配给自定义处理程序,
    • 显示PopupMenu。
  2. 在第二个控件上单击:
    • 保存PopupMenu关闭时的时间(这仍然在执行上一个OnClick事件的过程中),
    • 自定义的OnMouseDown事件处理程序称为
    • 如果保存的时间在最近的100毫秒之内,则释放鼠标捕获,并中止所有执行。

注意:可能已经存在的OnMouseDown事件设置不会保存并消失!

为什么这适用于按钮

TCustomButton通过响应Windows发送的CN_COMMAND消息来处理单击事件。 那是Windows BUTTON系统类的特定控件特性。 通过取消鼠标捕获模式,不会发送此消息。 因此,控件的OnClick事件不会在第二次单击时触发。

为什么这对面板不起作用

TPanel通过将csClickEvents样式添加到其ControlStyle属性来处理单击事件。 这是特定的VCL特性。 通过中止执行,由于WM_LBUTTONDOWN消息而导致的后续代码将停止。 但是, TPanelOnClick事件在其WM_LBUTTONUP消息处理程序的某处触发,因此OnClick事件仍然被触发。

两者的解决方案

使用davea的答案回答另一个问题,如果PopupMenu关闭的节省时间在最近的100毫秒之内,他根本不执行任何操作。

受限制的 HTML

  • 允许的HTML标签:<a href hreflang> <em> <strong> <cite> <blockquote cite> <code> <ul type> <ol start type> <li> <dl> <dt> <dd> <h2 id> <h3 id> <h4 id> <h5 id> <h6 id>
  • 自动断行和分段。
  • 网页和电子邮件地址自动转换为链接。

相关推荐
  • Drop down menu for any TControl
    Continue of this topic: Drop down menu for TButton I have wrote a generic code for DropDown memu with any TControl, but for some reason it dose not work as expected with TPanel: var TickCountMenuClosed: Cardinal = 0; LastPopupControl: TControl; type TDropDownMenuHandler = class public class procedure MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); end; TControlAccess = class(TControl); class procedure TDropDownMenuHandler.MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin if LastPopupControl <> Sender then Exit; if
  • Drop down menu for TButton
    I am trying to simulate a drop down menu for a TButton, as shown below: procedure DropMenuDown(Control: TControl; PopupMenu: TPopupMenu); var APoint: TPoint; begin APoint := Control.ClientToScreen(Point(0, Control.ClientHeight)); PopupMenu.Popup(APoint.X, APoint.Y); end; procedure TForm1.Button1MouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin if Button = mbLeft then begin DropMenuDown(Button1, PopupMenu1); // ReleaseCapture; end; end; The problem is that when the menu is dropped down, if I click the button again I would like the menu to close, but
  • 如何将鼠标滚轮输入直接控制在光标下而不是焦点上?(How to direct the mouse wheel input to control under cursor instead of focused?)
    问题 我使用了许多滚动控件:TTreeViews,TListViews,DevExpress cxGrids和cxTreeLists等。旋转鼠标滚轮时,无论鼠标悬停在哪个控件上,具有焦点的控件都会接收输入。 如何将鼠标滚轮输入定向到鼠标光标悬停的任何控件上? 在这方面,Delphi IDE可以很好地工作。 回答1 尝试像这样覆盖表单的MouseWheelHandler方法(我尚未对此进行全面测试): procedure TMyForm.MouseWheelHandler(var Message: TMessage); var Control: TControl; begin Control := ControlAtPos(ScreenToClient(SmallPointToPoint(TWMMouseWheel(Message).Pos)), False, True, True); if Assigned(Control) and (Control <> ActiveControl) then begin Message.Result := Control.Perform(CM_MOUSEWHEEL, Message.WParam, Message.LParam); if Message.Result = 0 then Control.DefaultHandler(Message
  • 按钮上的“自定义菜单”单击为下拉菜单(Custom Menu on button click as drop down)
    问题 我正在尝试实现flipkart应用程序的操作栏功能。 。 为此,我已经成功创建了一个自定义操作栏,但是在将菜单显示为溢出图标单击下拉菜单时遇到了问题。 如果我尝试在按钮上单击“ Android选项菜单”,请单击,然后在屏幕底部中心获得没有图标的菜单(4.2.2)。 使用自定义对话框或警报对话框会淡化背景,并且它们也会出现在屏幕中央。 我应该怎么做才能获得上图所示的相似功能? 回答1 尝试这种方式,希望这将帮助您解决问题。 请按照链接说明操作,以显示带有图像的弹出菜单项,您可以使用showAtLocation()将弹出窗口显示为所需位置。 检查:带图标的PopupMenu 回答2 您可以轻松使用ListPopupWindow以及任何对您来说方便的adapter : // create any adapter with any data, just as for ordinary ListView SimpleAdapter simpleAdapter= new SimpleAdapter(this, dataSet, android.R.layout.simple_list_item_2, new String[] {"Name", "Tel. no."}, new int[] {android.R.id.text1, android.R.id.text2})
  • 使用 IntraWeb (16) - 基本控件之 TIWList、TIWListbox、TIWComboBox、TIWOrderedListbox
    使用 IntraWeb (16) - 基本控件之 TIWList、TIWListbox、TIWComboBox、TIWOrderedListbox TIWList //列表; 它对应 Html 中的 OL、LI(某些选项下会用表格模拟); TIWListbox 和 TIWComboBox 则对应 Html 在的 Option TIWListbox //列表框 TIWComboBox //组合下拉框 TIWOrderedListbox //可手动调整顺序的列表; 好像是新增的, 还不成熟TIWList 所在单元及继承链:IWHTMLControls.TIWList < TIWCustomControl < TIWBaseHTMLControl < TIWBaseControl < TIWVCLBaseControl < TControl < TComponent < TPersistent < TObject主要成员:property Items: TStringList // property Numbered: Boolean //是否使用数字编号; 默认 True property Bulleted: Boolean //是否使用项目符号; 默认 False property BulletType: TIWListBulletType //项目符号类型: btDisc(默认)
  • 每个按钮组有多个下拉菜单?(Multiple drop-down menus per button group?)
    问题 现在,我在界面上看到了这个: 但是在带有bolt , plus-circle和gear的按钮之间,我希望没有间隙。 根据Bootstrap组件文档中的以下注释,我之间存在差距,因为它似乎是强制性的: 通过将任何按钮放在.btn组中并提供适当的菜单标记,可以使用任何按钮来触发下拉菜单。 因此,现在存在差距,因为按钮的布局格式为: <div class="btn-toolbar" role="toolbar"> <div class="btn-group btn-group-sm"> <button type="button" title="Focusing" ... > <span class='fa fa-bolt '></span> </button> </div> <div class="btn-group btn-group-sm"> <button type="button" class="btn btn-default dropdown-toggle" data-toggle="dropdown" href="#"> <span class='fa fa-plus-circle '></span> <span class='fa fa-caret-down '></span> </button> <ul class="dropdown-menu" role=
  • 如何使用Python使用Selenium选择下拉菜单值?(How to select a drop-down menu value with Selenium using Python?)
    问题 我需要从下拉菜单中选择一个元素。 例如: <select id="fruits01" class="select" name="fruits"> <option value="0">Choose your fruits:</option> <option value="1">Banana</option> <option value="2">Mango</option> </select> 1)首先,我必须单击它。 我这样做: inputElementFruits = driver.find_element_by_xpath("//select[id='fruits']").click() 2)那之后我必须选择好元素,比如说Mango 。 我试图用inputElementFruits.send_keys(...)来做到这一点,但是没有用。 回答1 除非您的点击触发了某种Ajax调用来填充列表,否则您实际上不需要执行该点击。 只需找到元素,然后枚举选项,然后选择所需的选项即可。 这是一个例子: from selenium import webdriver b = webdriver.Firefox() b.find_element_by_xpath("//select[@name='element_name']/option[text()='option_text']")
  • 像ICS中一样,在Android 2.x中创建下拉菜单的最佳方法(The best way to create drop down menu in android 2.x like in ICS)
    问题 我想使用下拉菜单创建按钮,例如ICS上的ActionBar中的溢出菜单按钮。 我有问题,因为Android 2.x中没有PopupMenu。 使用Spinner的第二种方法,但它不适合我,因为Spinner总是在我的自定义背景或所选项目上显示第一个项目。 我该如何实现? 总的来说,我只需要ContextMenu,而只需要单击一下即可。 谢谢。 看起来像这样: 回答1 如果您打算重新创建操作栏,则可以看一下ActionBarSherlock项目,该项目向后移植了这些功能。 如果您希望能够在应用程序的任何位置弹出这样的菜单,则可以阅读ActionBarSherlock项目源代码中MenuPopupHelper类实现的实现。 回答2 我将PopupWindow用于此类事情。 它比PopupMenu还要工作,在PopupMenu中,您只给它一个Menu并使用OnMenuItemClickListener.onMenuItemClick()响应事件。 使用PopupWindow,您可以提供内容视图并以较低的级别处理单击。 不过,它可以轻松完成工作。 使用showAsDropDown()方法,您可以根据需要将弹出窗口锚定到另一个View(将其适当地放置为下拉菜单或弹出菜单)。 从API级别1开始就存在,并且对我所有的测试设备都适用。 回答3 需求的另一种选择是,创建一个列表视图
  • CSS下拉菜单(CSS drop down menu)
    问题 一直在尝试获取“纯CSS”下拉菜单,尝试了几天以获取“简单” CSS下拉菜单导航可以获取显示的顶层和隐藏的第二层,但不能使子项在悬停时显示吗? 任何帮助,非常感谢样品隔离在这里:: css和html下面粘贴bin http://www.webdevout.net/test?01t 回答1 您的问题可能是因为您错误地构建了html。 子菜单( .level-two )应该嵌套在.level-one li元素内: <div id="navtree"> <ul class="level-one"> <li><a href="/about/" title="about">about</a></li> <li><a href="/contact/" title="contact">contact</a></li> <li><a href="/feeds/latest/" title="subscribe">subscribe</a></li> <li><a href="/Test1/" title="Test1page">Test1</a> <ul class="level-two"> <li><a href="/Test1/testsub/" title="test1subpage">Test1sub</a></li> </ul> </li> <li><a href="/Test2/
  • 使用d3.js添加下拉菜单(Adding drop down menu using d3.js)
    问题 我试图在我的d3可视化文件中添加一个下拉菜单。 问题在于选择任何一个选项都不会调用事件侦听器。 另外,如何访问所选选项的值? 以下是我的代码段。 d3.text("uniqueTeams.php",function(json){ var dd=JSON.parse(json); var b= d3.select("#s4").select("#shru"); var u=b.append("select"); var t=u.selectAll("option").data(dd).enter().append("option") .attr("value",function(d){return d.teamShotID;}) .text(function(d){return d3.select(this).node().__data__.teamShotID;}); t.on("change",change); }); function change(value) { console.log("team",value); } change();​​​​ 谢谢 回答1 您需要将.on("change")到select元素,而不是option元素。 var select = d3.select("#shru").append("select").on("change"
  • CSS下拉菜单悬停效果(CSS drop down menu hover effect)
    问题 我试图做一个简单的CSS下拉菜单。 将鼠标悬停在链接上时,我无法实现下拉子菜单。 下面是我的html和css规则,谢谢。 ul#menu li { position:relative; list-style-type:none; float: left; padding:0px; width: 125px; height: 25px; } ul#sub1 li { position:absolute; left:0; width:125px; visibility: hidden; } ul#menu li:hover #sub1 { visibility:visible; } <ul id="menu"> <li><a href="#">Hyperlink 1</a></li> <li><a href="#">Hyperlink 2</a> <ul id="sub1"> <li><a href="#">Hyperlink 2.1</a></li> <li><a href="#">Hyperlink 2.2</a></li> </ul> </li> <li><a href="#">Hyperlink 3</a></li> <li><a href="#">Hyperlink 4</a></li> </ul> 回答1 试试这个: ul#sub1 { position
  • Delphi XE2 之 FireMonkey 入门(37) - 控件基础: TControl 概览
    Delphi XE2 之 FireMonkey 入门(37) - 控件基础: TControl 概览 { TControl } public constructor Create(...); override; // destructor Destroy; override; // procedure AddObject(...); override; //添加对象 procedure RemoveObject(...); override; //移除对象 procedure SetNewScene(...); virtual; //设置新场景 procedure SetBounds(...); virtual; //设置位置、大小 function AbsoluteToLocal(...): TPointF; virtual; //点转换 function LocalToAbsolute(...): TPointF; virtual; //... function AbsoluteToLocalVector(...): TVector; virtual; //... function LocalToAbsoluteVector(...): TVector; virtual; //... function PointInObject(...): Boolean; virtual;
  • CSS下拉菜单不起作用(CSS Drop Down Menu Not working)
    问题 我正在学习CSS的基础知识,并试图创建一个下拉菜单,我尝试使用普通CSS创建一个下拉菜单,但是它不起作用。 到目前为止,我尝试了以下代码: 的CSS <!-- because of the * default code it takes out all margin and padding or idententation --> *{ margin: 0px; padding: 0px;} body { font-family: verdana; background-color: ABC; padding: 50px; } h1 { text-align: center; border-bottom: 2px solid #009; margin-bottom: 50px; } /*rules for navigation menu */ /*============================================*/ ul#navmenu, ul.sub1 { list-style-type: none;<!-- sets bullets to none --> } ul#navmenu li { outline: 1px solid red; width: 125px; text- align: center; position: relative
  • 获取下拉菜单的最后一个选项的价值?(Get value of last option of a drop down?)
    问题 我有下拉菜单..这是动态的..如何获取下拉菜单中最后一项的值(也可以使用jquery) 回答1 使用jQuery,这非常简单: var lastValue = $('#idOfSelect option:last-child').val(); 使用普通的Javascript并不会更糟: var theSelect = document.getElementById('idOfSelect'); var lastValue = theSelect.options[theSelect.options.length - 1].value; 回答2 使用jQuery: $('select option:last').val() 当然,您应该使用适当的ID来寻址select元素。 如果您将“菜单”列为列表的术语,则可以执行类似的操作: // gives the text inside the last <li> element $('#menu li:last').text() // gives you the attribute 'some_attribute' of the last <li> element $('#menu li:last').attr('some_attribute') 这里的关键是使用:last选择器。 回答3 另一种方式 $('select option'
  • 带悬停的Bootstrap下拉菜单(Bootstrap Dropdown with Hover)
    问题 好的,所以我需要的很简单。 我已经设置了一个带有一些下拉菜单的导航栏(使用class="dropdown-toggle" data-toggle="dropdown" ),并且工作正常。 事情是它可以在“ onClick ”上运行,而我希望它可以在“ onHover ”上运行。 有内置的方法可以做到这一点吗? 回答1 最简单的解决方案是使用CSS。 添加类似... .dropdown:hover .dropdown-menu { display: block; margin-top: 0; // remove the gap so it doesn't close } 工作小提琴 回答2 最好的方法是只用悬停触发Bootstraps click事件。 这样,它仍应保持对触摸设备的友好 $('.dropdown').hover(function(){ $('.dropdown-toggle', this).trigger('click'); }); 回答3 您可以使用jQuery的悬停功能。 您只需要在鼠标进入时添加open的类,并在鼠标离开下拉菜单时删除该类。 这是我的代码: $(function(){ $('.dropdown').hover(function() { $(this).addClass('open'); }, function() { $(this)
  • Flutter自定义功能强大的下拉筛选菜单gzx_dropdown_menu
    gzx_dropdown_menu 这是一个Flutter自定义功能强大的轻量级下拉筛选菜单Package,它支持iOS和Android。 🙀开源不易,麻烦给个Star⭐️吧!我会根据大家的关注度和个人时间持续更新代码!🙀如你想接收更新消息,你可以Watch下,有问题请提到Issues。 导航 功能介绍待办事项Gif效果图如何使用相关Repository相关文章捐助开发者 功能介绍 A custom is strong dropdown menu for Flutter. Easy to use and powerful for customization, it’s up to you what you want to display in the dropdown menu! Custom dropdown headerCustom dropdown header itemCustom dropdown menuCustom dropdown menu animationControl dropdown menu show or hide 查看版本更新记录 待办事项 … Gif效果图 效果图展示了仿美团和淘宝的下拉筛选菜单。 美团的代码就在这个仓库的example目录下淘宝的代码在Flutter 淘宝 如何使用 目前已发布到Pub,你可以在Pub官网查看最新的版本和更新说明
  • 如何在我的CSS下拉菜单中添加第3级?(How to add a 3rd level to my CSS drop down menu?)
    问题 我有一个2级下拉菜单,在所有浏览器中都很棒。 现在,我想添加一个第三级。 我怎么做? 这是菜单的HTML: <div class="nav"> <div class="navbar"> <ul class="menu"> <li><a href="#">Home</a></li> <li><a href="#">About JoyFactory</a> <ul class="sub-menu"> <li><a href="#">Who We Are</a></li> <li><a href="#">Our Education Concept</a></li> <li><a href="#">References</a></li> </ul> </li> <li><a href="#">JoyFactory Kinderkrippe</a> <ul class="sub-menu"> <li><a href="#">JoyFactory Kinderkrippe Oerlikon</a> <ul> <li><a href="#">item 1</a></li> <li><a href="#">item 2</a></li> <li><a href="#">item 3</a></li> <li><a href="#">item 4</a></li> </ul> </li>
  • 带有下拉菜单的Windows.Forms按钮(Windows.Forms button with drop-down menu)
    问题 我正在使用.NET上的Windows.Forms开发简单的C#应用​​程序。 我需要一些按钮来显示带有子类别的下拉菜单-非常类似于ToolStripMenu,但是该按钮是您所知道的。 我搜索了它,但未找到任何变体。 我的问题是:有没有办法做到这一点,也许有一些秘密的按钮属性可以将菜单附加到菜单上? 任何帮助将不胜感激。 回答1 您可以在click事件上显示ContextMenuStrip: private void button1_Click(object sender, EventArgs e) { contextMenuStrip1.Show(button1, new Point(0, button1.Height)); } 为了确定是在按钮上方还是在菜单下方显示菜单,可以尝试使用以下代码,该代码可以测量菜单并确定菜单是否部分脱离屏幕: private void button1_Click(object sender, EventArgs e) { Point screenPoint = button1.PointToScreen(new Point(button1.Left, button1.Bottom)); if (screenPoint.Y + contextMenuStrip1.Size.Height > Screen.PrimaryScreen
  • Twitter Bootstrap下拉突然不起作用(twitter bootstrap drop down suddenly not working)
    问题 我想知道是否有人可以帮助我。 我的引导程序下拉菜单突然停止工作。 我不知道为什么。 它曾经在工作。 我没有触摸我的视图,也不是布局视图,所以我认为问题不存在。 我很确定这和我的javascript有关,但是我不知道它从哪里来。 我的宝石文件是... gem 'rails', '3.2.3' gem 'bootstrap-sass', '2.0.1' gem 'bcrypt-ruby', '3.0.1' gem 'faker', '1.0.1' gem 'will_paginate', '3.0.3' gem 'bootstrap-will_paginate', '0.0.5' gem 'devise' gem 'carrierwave' gem 'rmagick' gem 'delayed_job_active_record' gem 'daemons' gem 'make_voteable' gem 'admin_data' gem 'indextank' 而我的application.js是... //= require jquery //= require jquery-ui //= require jquery_ujs //= require bootstrap-dropdown //= require bootstrap //= require_tree
  • Powershell..select网页上的下拉菜单(Powershell..select drop down menu from web page)
    问题 我试图在网站上选择一个下拉菜单,但我完全不知道该怎么做。 我用它搜索了地狱,但找不到任何运气。 这就是我想做的.. 连接到网络..从下拉菜单设置数量中选择一个项目,然后添加到购物车中................ .................................... [void] [System.Reflection.Assembly]::LoadWithPartialName("System.Drawing") [void] [System.Reflection.Assembly]::LoadWithPartialName("System.Windows.Forms") $objForm = New-Object System.Windows.Forms.Form $objForm.Text = "Web Link" $objForm.Size = New-Object System.Drawing.Size(300,150) $objForm.StartPosition = "CenterScreen" $objForm.KeyPreview = $True $objForm.Add_KeyDown({if ($_.KeyCode -eq "Enter") {$tag=$objTextBox.Text;$objForm.Close()}})