如果我将Culture值更改x次,当用户尝试退出时,FormClosing方法将被触发x次.
这是我的FormClosing事件:
private void FrmParent_FormClosing(object sender, FormClosingEventArgs e)
{
if (MessageBox.Show(this, Properties.Resources.msgExit, this.Text, MessageBoxButtons.YesNo, MessageBoxIcon.Question) == System.Windows.Forms.DialogResult.No)
e.Cancel = true;
}
Run Code Online (Sandbox Code Playgroud)
这是我的组合框值更改事件:
void cbCulture_ToolValueChanged(object sender, ToolEventArgs e)
{
ComboBoxTool cbCulture = (ComboBoxTool)sender;
var culture = cbCulture.Value.ToString();
FormHelpers.SetCulture(culture);
this.Controls.Clear();
this.InitializeComponent();
InitForm();
}
Run Code Online (Sandbox Code Playgroud)
我必须清理并初始化控件以将UI更改为新文化,但这样做我是否在InitializeComponent()中多次分配FormClosing事件?我该如何避免这种行为?
我在做克朗代克游戏。逻辑全部正常。我在用javafx中的UI遇到麻烦。
我一直在尝试将卡从“桌面堆”区域移动/拖动,但没有得到预期的结果。我的卡是一个ImageView,里面有一个Image。卡位于窗格中:
Pane tableau = new Pane();
for (int i = 0; i < n; i++) {
Image img = new Image("resources/images/" + (i + 1) + ".png");
ImageView imgView = new ImageView(img);
imgView.setY(i * 20);
//imgView Mouse Events here
tableau.getChildren().add(imgView);
}
Run Code Online (Sandbox Code Playgroud)
我试过了:
imgView.setOnMousePressed((MouseEvent mouseEvent) -> {
dragDelta.x = imgView.getLayoutX() - mouseEvent.getSceneX();
dragDelta.y = imgView.getLayoutY() - mouseEvent.getSceneY();
});
imgView.setOnMouseDragged((MouseEvent mouseEvent) -> {
imgView.setLayoutX(mouseEvent.getSceneX() + dragDelta.x);
imgView.setLayoutY(mouseEvent.getSceneY() + dragDelta.y);
});
Run Code Online (Sandbox Code Playgroud)
该解决方案不起作用,因为我正在设置位置,因此释放卡时不会回到原来的位置,而且卡正在与其他UI对象碰撞。
另一尝试:
imgView.setOnDragDetected((MouseEvent event) -> {
ClipboardContent content = new ClipboardContent(); …Run Code Online (Sandbox Code Playgroud)