我想知道如何在Visual Tree中处理通过ShowDialog打开的窗口.
例如,Window A通过ShowDialog打开Window B. 在窗口B上触发路由命令时,窗口A不接收命令(即使它正在侦听它).
有没有办法让这项工作?
谢谢!乔恩
我在LG Eve手机上测试我的应用程序.我有一个应用程序试图从Web下载一些东西,当它抛出一个异常时,它应该启动一个alertdialog说有一个错误.当手机没有wifi信号时,程序会在builder.create()崩溃(见下面的代码).但是,当有wifi信号,并且异常被其他东西抛出时(例如,url中的拼写错误),对话框将启动它应该的方式.任何线索,为什么这可能是?
onCreateDialog的代码:
@Override
protected Dialog onCreateDialog(int id){
Dialog d = null;
switch (id){
case DIALOG_DATA_ERROR_ID:
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setMessage(getResources().getString(R.string.error_data));
builder.setCancelable(false);
builder.setNeutralButton("OK", new DialogInterface.OnClickListener(){
public void onClick(DialogInterface d, int id){
d.cancel();
}
});
d = builder.create();
break;
}
return d;
}
Run Code Online (Sandbox Code Playgroud)
调用showDialog的AsyncTask代码:
private static class DownloadJSONTask extends AsyncTask<String, Void, String>{
private ProgressDialog dialog;
private Activity parent;
private JSONParserInterface jsonParser;
public DownloadJSONTask(Activity parent, JSONParserInterface jsonParser){
this.parent = parent;
this.jsonParser = jsonParser;
}
protected void onPreExecute(){
dialog = ProgressDialog.show(parent, "Loading", …
Run Code Online (Sandbox Code Playgroud) labelTotal保存类Keypad(C#WinForms)的值.已覆盖ToString以返回labelTotal.Text.
namespace Gui3
{
public partial class Keypad : Form
{
public Keypad()
{
InitializeComponent();
}
public override String ToString() {return labelTotal.Text;}
private void buttonOk_Click(object sender, EventArgs e)
{
this.Close();
}
...
Run Code Online (Sandbox Code Playgroud)
为什么不键盘.ShowDialog().ToString()返回labelTotal.Text?
namespace Gui3
{
public partial class Setup : Form
{
public Setup()
{
InitializeComponent();
}
private void buttonStartDepth_Click(object sender, EventArgs e)
{
Keypad keypad = new Keypad();
////////// Not working as expected /////////
String total = keypad.ShowDialog().ToString();
...
Run Code Online (Sandbox Code Playgroud) 这是LogCat所说的:
01-21 17:20:06.057: ERROR/AndroidRuntime(27463): java.lang.NoSuchMethodError: com.mohit.geo2do.activities.TasksList.showDialog
01-21 17:20:06.057: ERROR/AndroidRuntime(27463): at com.mohit.geo2do.activities.TasksList.onContextItemSelected(TasksList.java:190)
01-21 17:20:06.057: ERROR/AndroidRuntime(27463): at android.app.Activity.onMenuItemSelected(Activity.java:2183)
01-21 17:20:06.057: ERROR/AndroidRuntime(27463): at com.android.internal.policy.impl.PhoneWindow$ContextMenuCallback.onMenuItemSelected(PhoneWindow.java:2785)
01-21 17:20:06.057: ERROR/AndroidRuntime(27463): at com.android.internal.view.menu.MenuItemImpl.invoke(MenuItemImpl.java:140)
01-21 17:20:06.057: ERROR/AndroidRuntime(27463): at com.android.internal.view.menu.MenuBuilder.performItemAction(MenuBuilder.java:855)
01-21 17:20:06.057: ERROR/AndroidRuntime(27463): at com.android.internal.view.menu.MenuDialogHelper.onClick(MenuDialogHelper.java:129)
01-21 17:20:06.057: ERROR/AndroidRuntime(27463): at com.android.internal.app.AlertController$AlertParams$3.onItemClick(AlertController.java:898)
01-21 17:20:06.057: ERROR/AndroidRuntime(27463): at android.widget.AdapterView.performItemClick(AdapterView.java:301)
01-21 17:20:06.057: ERROR/AndroidRuntime(27463): at android.widget.ListView.performItemClick(ListView.java:3626)
01-21 17:20:06.057: ERROR/AndroidRuntime(27463): at android.widget.AbsListView$PerformClick.run(AbsListView.java:3600)
01-21 17:20:06.057: ERROR/AndroidRuntime(27463): at android.os.Handler.handleCallback(Handler.java:587)
01-21 17:20:06.057: ERROR/AndroidRuntime(27463): at android.os.Handler.dispatchMessage(Handler.java:92)
01-21 17:20:06.057: ERROR/AndroidRuntime(27463): at android.os.Looper.loop(Looper.java:123)
01-21 17:20:06.057: ERROR/AndroidRuntime(27463): at android.app.ActivityThread.main(ActivityThread.java:4363)
01-21 17:20:06.057: ERROR/AndroidRuntime(27463): at …
Run Code Online (Sandbox Code Playgroud) 您好,我一直在网上搜索有关此问题的信息,但没有找到任何可以修复该问题的信息。
\n\n我想在主窗口加载时显示一个对话框,因此我为我的MainWindow
Loaded 事件分配了一个事件处理程序。处理程序如下:
private void Window_Loaded(object sender, RoutedEventArgs e) {\n if (Settings.Instance.GetBool(ConfigFunctionalityGroup, "CheckForUpdatesOnStartup")) {\n worker = new BackgroundWorker();\n worker.DoWork += worker_DoWork;\n worker.ProgressChanged += worker_ProgressChanged;\n worker.WorkerReportsProgress = true;\n worker.RunWorkerAsync();\n }\n\n findandreplacedialog = new FindAndReplaceDialog() { Owner = this };\n\n Open_Environment_Click(null, null);\n}\n
Run Code Online (Sandbox Code Playgroud)\n\nOpen_Environment_Click
是菜单项的事件处理程序,编写如下:
private void Open_Environment_Click(object sender, RoutedEventArgs e) {\n SelectEnvironmentDialog dialog = new SelectEnvironmentDialog(Environments);\n\n if (dialog.ShowDialog().Value == true) {\n dialog.SelectedEnvironment.Open();\n }\n}\n
Run Code Online (Sandbox Code Playgroud)\n\nShowDialog
当我在 中调用对话框时发生异常Open_Environment_Click
。
异常详情如下:
\n\n …在我的程序中,我使用WebBrowser控件进行OAuth.它位于vk_auth_window
表格上.所以在我打电话的代码中vk_auth_window.WebBrowser1.Navigate(vkauthurl)
.如果身份验证成功,我会默默地获取令牌,但如果用户未经过身份验证,vk_auth_window
则会向他们显示一个表单以输入用户名和密码.为了检查这一点,我捕获_DocumentComplete事件并检查正确的URL.在用户完成身份验证或关闭身份验证表单之前,我不需要执行任何其他代码.ShowDialog()可以解决这个问题,但它在某种程度上隐藏了WebBrowser控件中用户名和密码字段的光标.所以我Dim showform as Boolean=True
在_DocumenComplete事件中引入了一个变量并将其设置为False,在主代码中我使用了无限循环.
While showform
System.Threading.Thread.Sleep(100)
Application.DoEvents()
End While
Run Code Online (Sandbox Code Playgroud)
然而,由于线程休眠,它使用户输入变慢.如果我删除它们,它会加载CPU相当多.有没有更好的方法等待表格关闭?它是什么?
经过2个小时的研究,我仍然找不到解决我的问题的方法。
我所做的任务是在 BackGroundWorker 线程中处理一些文件。但是,有时我需要使用 ShowDialog 让用户选择 SaveFile 位置,但我收到 STA/MTA 错误。
主窗体代码:
private void button2_Click(object sender, EventArgs e)
{
button1.Enabled = false;
ProcessReportWorker.RunWorkerAsync();
}
Run Code Online (Sandbox Code Playgroud)
工作代码:
void ProcessReportWorker_DoWork(object sender, DoWorkEventArgs e)
{
int ReportCount = Reports.Count();
foreach (string Report in Reports)
{
ProcessReport NewReport = new ProcessReport(Report);
string result = NewReport.Start();
}
}
Run Code Online (Sandbox Code Playgroud)
ProcessReport.Start() 代码:
class ProcessReport
{
public string Start()
{
if(File.Exists(ResultPath))
{
SaveFileDialog SaveReport = new SaveFileDialog();
SaveReport.InitialDirectory = "c:\somepath";
SaveReport.CheckPathExists = true;
SaveReport.DefaultExt = ".xls";
SaveReport.OverwritePrompt = true;
SaveReport.ValidateNames …
Run Code Online (Sandbox Code Playgroud) 我找到了这个网站并运行了代码。该示例代码运行良好。这段代码在这里。
import 'package:flutter/material.dart';
void main() {
runApp(MaterialApp(
home: MyApp(),
));
}
class MyApp extends StatefulWidget {
@override
_State createState() => _State();
}
class _State extends State<MyApp> {
bool isSwitched = false;
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Flutter - tutorialkart.com'),
),
body: Center(
child: Switch(
value: isSwitched,
onChanged: (value) {
setState(() {
isSwitched = value;
print(isSwitched);
});
},
activeTrackColor: Colors.lightGreenAccent,
activeColor: Colors.green,
),
)
);
}
}
Run Code Online (Sandbox Code Playgroud)
修复了放置在 ShowDialog 内的 Switch Widget。
import 'package:flutter/material.dart'; …
Run Code Online (Sandbox Code Playgroud) 我对 Flutter 还是个新手。我尝试使我的对话框能够在单击对话框外部时关闭。但是,如果我使用 Scaffold,barrierDismissible:true将不起作用。我尝试使用 Wrap 但出现错误:将显示找不到找到的材质小部件。有关于如何关闭对话框的任何想法吗?
这是我的代码:
showGeneralDialog(
barrierDismissible: true,
pageBuilder: (context, anim1, anim2) {
context1 = context;
return StatefulBuilder(
builder: (context, setState) {
return Scaffold(
backgroundColor: Colors.black .withOpacity(0.0),
body: Align(
alignment: Alignment.bottomCenter,
child: Container(
child: InkWell()
)
)
}
}
)
Run Code Online (Sandbox Code Playgroud) 在我的代码中使用有状态小部件和setstate以及showdialog和Alertdialog似乎无法正常工作,但为了简化起见,我在这里用更小更简单的代码模拟了同样的问题,以便更好地理解问题
import 'package:flutter/material.dart';
import '../widgets/app_drawer.dart';
class Test extends StatefulWidget {
@override
State<Test> createState() => _TestState();
}
class _TestState extends State<Test> {
int x = 0;
@override
Widget build(BuildContext context) {
return Scaffold(
drawer: AppDrawer(),
appBar: AppBar(
title: Text("Shop"),
),
body: Column(
children: [
RaisedButton(
onPressed: () {
showDialog(
context: context,
builder: (ctx) => AlertDialog(
title: Text("hey"),
content: Text(x.toString()),
actions: [
RaisedButton(
onPressed: () {},
child: Text("click me"),
),
RaisedButton(
onPressed: () { …
Run Code Online (Sandbox Code Playgroud) 在我的C#WinForms程序中,我有一些表单,我将其中一个显示为对话框:
MyForm mf = new MyForm();
mf.ShowDialog();
Run Code Online (Sandbox Code Playgroud)
但是,当我尝试为他们设置表格结束活动时,它不起作用;
mf.FormClosing += delegate { MessageBox.Show("Dialog is closed.")};
Run Code Online (Sandbox Code Playgroud)
问题是什么?
PS:当我使用mf.Show()方法调用表单时,它工作正常.
谢谢.
我创建了一个模拟爆炸的动画:带有此动画的"booom"图像:
blast.xml HyperspaceExplosion on Activity
<set xmlns:android="http://schemas.android.com/apk/res/android"
android:shareInterpolator="false">
<scale
android:interpolator="@android:anim/bounce_interpolator"
android:fromXScale="1.0"
android:toXScale="2.0"
android:fromYScale="1.0"
android:toYScale="2.5"
android:pivotX="50%"
android:pivotY="50%"
android:fillAfter="false"
android:fillBefore="false"
android:duration="3000"
/>
</set>
Run Code Online (Sandbox Code Playgroud)
当玩家点击炸弹爆炸开始时.在爆炸结束时,我想打开一个Dialog.
炸弹行为的简单代码:
getBombImage().setOnClickListener(
new View.OnClickListener() {
MediaPlayer mp = null;
@Override
public void onClick(View v) {
getExplosionImage().setVisibility(View.VISIBLE);
if(!isSoundOff()){
mp = MediaPlayer.create(getApplicationContext(), R.raw.explosion);
mp.start();
}
getExplosionImage().startAnimation(getHyperspaceExplosion());
getExplosionImage().setVisibility(View.INVISIBLE);
showDialog(1);
}
}
);
Run Code Online (Sandbox Code Playgroud)
问题是爆炸和对话在时间上是冲突的,并且在对话框打开后爆炸继续.
我想要两个事件:在爆炸之前.在爆炸结束时,我想打开对话框.
有人帮我吗?
谢谢你的建议.
我正在使用颤振构建 android 应用程序。我在以编程方式关闭简单对话框时遇到问题。
现在我有一个名为 ListVessel 的有状态页面。此页面包含来自数组 otherVessels 的 listTile。
下面是这个页面的代码。
class ListVessel extends StatefulWidget {
final Function() notifyParent;
ListVessel({Key key, @required this.notifyParent}) : super(key: key);
@override
_ListVesselState createState() => _ListVesselState();
}
class _ListVesselState extends State<ListVessel> {
@override
Widget build(BuildContext context) {
return ListView.separated(
separatorBuilder: (context, index) => Divider(color: Colors.blueGrey),
itemCount: otherVessels.length,
itemBuilder: (context, index) {
return ListTile(
title: Text("Name: "+otherVessels[index]["shipName"]),
onTap: () {
showDialog (
context: context,
builder: (_){
return otherTap(idx:index);
}
);
}
);
},
);
}
}
} …
Run Code Online (Sandbox Code Playgroud)