i am writing a c# component in visual studio.
And have one question :
When this c# component is selected ,then i press “p” in keyboard to toggle the preview of this component, how to write respond to this keypress event?
Thank you!
i am writing a c# component in visual studio.
And have one question :
When this c# component is selected ,then i press “p” in keyboard to toggle the preview of this component, how to write respond to this keypress event?
Thank you!
This might not be exactly what you’re looking for but are you aware of the customizable shortcuts in the Grasshopper Settings?
Thank you,but i just for example by using preview,the real thing i donot know is how to write c# to respond keypress.
public class KeyListenerExampleComponent : GH_Component
{
private bool _listen;
private bool _expired;
private Keys _key;
private bool _isPressed;
public KeyListenerExampleComponent() : base("Key Listener", "KL", "Description", "Extra", "Examples")
{
_listen = false;
_expired = true;
_key = Keys.F7;
_isPressed = false;
}
public override void AddedToDocument(GH_Document document)
{
if (Locked) RemoveHandlers();
else AddHandlers();
}
public override void RemovedFromDocument(GH_Document document) => RemoveHandlers();
public override void DocumentContextChanged(GH_Document document, GH_DocumentContext context)
{
switch (context)
{
case GH_DocumentContext.Open:
case GH_DocumentContext.Loaded:
case GH_DocumentContext.Unlock:
if (Locked)
{
RemoveHandlers();
break;
}
AddHandlers();
break;
case GH_DocumentContext.Close:
case GH_DocumentContext.Unloaded:
case GH_DocumentContext.Lock:
RemoveHandlers();
break;
}
}
public override void ExpireSolution(bool recompute)
{
_expired = true;
base.ExpireSolution(recompute);
}
private void AddHandlers()
{
RemoveHandlers();
Instances.DocumentEditor.KeyDown += KeyDownEventHandler;
Instances.DocumentEditor.KeyUp += KeyUpEventHandler;
}
private void RemoveHandlers()
{
Instances.DocumentEditor.KeyDown -= KeyDownEventHandler;
Instances.DocumentEditor.KeyUp -= KeyUpEventHandler;
}
private void KeyDownEventHandler(object sender, KeyEventArgs e)
{
if (!_listen || _expired || !Equals(e.KeyCode, _key)) return;
_isPressed = true;
ExpireSolution(true);
}
private void KeyUpEventHandler(object sender, KeyEventArgs e)
{
if (!_listen || _expired || !Equals(e.KeyCode, _key)) return;
_isPressed = false;
ExpireSolution(true);
}
protected override void RegisterInputParams(GH_InputParamManager pManager)
{
pManager.AddTextParameter("Key", "Key", "Key", GH_ParamAccess.item, "F7");
pManager.AddBooleanParameter("Listen", "Listen", "Listen", GH_ParamAccess.item, false);
}
protected override void RegisterOutputParams(GH_OutputParamManager pManager)
{
pManager.AddBooleanParameter("IsPressed", "IsPressed", "IsPressed", GH_ParamAccess.item);
}
protected override void SolveInstance(IGH_DataAccess da)
{
var key = "F7";
da.GetData(0, ref key);
TryParse(key, out _key);
da.GetData(1, ref _listen);
_expired = false;
da.SetData(0, _isPressed);
}
public override Guid ComponentGuid => new Guid("690c3f25-0e14-4d11-922e-afcf2cdc3e5b");
}
Thank you very much,i will try it