show()与showdialog()区别

这是个很弱的问题,但我还是要写一下:

显示有模式和无模式 Windows 窗体

窗体和对话框要么是有模式的,要么是无模式的。“模式”窗体或对话框必须关闭或隐藏,然后您才能继续使用应用程序的其余部分。有关使用对话框的更多信息,请参见对话框中的用户输入

显示重要消息的对话框应始终是有模式的。模式对话框的一个示例是 Visual Studio 中的“关于”对话框。 tabindex="0" keywords="frlrfSystemWindowsFormsMessageBoxClassTopic">MessageBox 是您可以使用的一个模式窗体。

“无模式”窗体让您在此窗体与另一窗体之间变换焦点,而不必关闭初始窗体。用户在该窗体显示的同时可继续在任何应用程序的其他位置工作。

无模式窗体的编程难度更大,因为用户访问这些窗体的顺序可能无法预知。不论用户执行什么操作,都必须使该应用程序的状态保持一致。工具窗口经常以无模式方式显示。无模式对话框的一个示例是 Visual Studio 中可从“编辑”菜单访问的“查找”对话框。使用无模式窗体可显示常用的命令或信息。

将窗体显示为有模式对话框

  • 调用 ShowDialog 方法。

    下列示例显示如何有模式地显示对话框。

    ' Visual Basic
    Dim frmAbout as New Form()
    ' Display frmAbout as a modal dialog
    frmAbout.ShowDialog()
    
    // C#
    //Display frmAbout as a modal dialog
    Form frmAbout = new Form();
    frmAbout.ShowDialog();
    
    // C++
    Form * frmAbout = new Form();
    //Display frmAbout as a modal dialog
    frmAbout->ShowDialog();

    tabindex="0" keywords="frlrfSystemWindowsFormsFormClassShowDialogTopic">Form.ShowDialog 方法有一个可选参数 owner,该参数可用于指定窗体的父子关系。例如,当主窗体中的代码显示对话框时,可将 Me(在 Visual Basic 中)或 This(在 C# 中)作为该对话框的所有者传递,以使您的主窗体成为所有者,如以下代码所示。

    ' Visual Basic
    Private Sub mnuAbout_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles mnuAbout.Click
       Dim f As New Form()
       f.ShowDialog(Me)
    End Sub
    
    // C#
    private void mnuAbout_Click(object sender, System.EventArgs e)
    {
       Form f = new Form();
       f.ShowDialog(this);
    }
    
    // C++
    private:
       System::Void mnuAbout_Click(System::Object *  sender,
          System::EventArgs *  e)
       {
          Form * f = new Form();
          f->ShowDialog(this);
       }

将窗体显示为无模式对话框

  • 调用 Show 方法。

    下列示例显示如何以无模式格式显示“关于”对话框。

    ' Visual Basic
    Dim f As New Form()
    ' Display frmAbout as a modeless dialog.
    f.Show()
    
    // C#
    //Display frmAbout as a modeless dialog
    Form f= new Form();
    f.Show();
    
    // C++
    Form * f = new Form();
    //Display f as a modeless dialog
    f->Show();
    注意   如果窗体显示为有模式,则在关闭该对话框之前,不执行 tabindex="0" keywords="frlrfSystemWindowsFormsFormClassShowDialogTopic">ShowDialog 方法后面的代码。但是,当窗体显示为无模式时,那么该窗体显示之后,会立刻执行 Show 方法后面的代码。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
以下是一段android代码,使用了List view和Spinner,可以让用户填写自己的个人信息,并在最后弹窗展示: MainActivity.java ```java import android.app.AlertDialog; import android.content.DialogInterface; import android.os.Bundle; import android.util.Log; import android.view.View; import android.widget.AdapterView; import android.widget.ArrayAdapter; import android.widget.EditText; import android.widget.ListView; import android.widget.Spinner; import androidx.appcompat.app.AppCompatActivity; public class MainActivity extends AppCompatActivity { private ListView listView; private ArrayAdapter<String> adapter; private String[] items = {"Name", "Age", "Gender", "Country"}; private String[] values = {"", "", "", ""}; private EditText editTextName; private EditText editTextAge; private Spinner spinnerGender; private ArrayAdapter<String> spinnerAdapter; private String[] genders = {"Male", "Female", "Other"}; private Spinner spinnerCountry; private ArrayAdapter<String> countryAdapter; private String[] countries = {"China", "USA", "Canada", "UK", "France", "Germany"}; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); listView = findViewById(R.id.listView); adapter = new ArrayAdapter<>(this, android.R.layout.simple_list_item_1, items); listView.setAdapter(adapter); editTextName = new EditText(this); editTextName.setHint("Name"); editTextName.setMaxLines(1); editTextAge = new EditText(this); editTextAge.setHint("Age"); editTextAge.setMaxLines(1); spinnerGender = new Spinner(this); spinnerAdapter = new ArrayAdapter<>(this, android.R.layout.simple_spinner_item, genders); spinnerAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); spinnerGender.setAdapter(spinnerAdapter); spinnerCountry = new Spinner(this); countryAdapter = new ArrayAdapter<>(this, android.R.layout.simple_spinner_item, countries); countryAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); spinnerCountry.setAdapter(countryAdapter); listView.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { switch (position) { case 0: showDialog(editTextName, position); break; case 1: showDialog(editTextAge, position); break; case 2: showDialog(spinnerGender, position); break; case 3: showDialog(spinnerCountry, position); break; } } }); } private void showDialog(final View view, final int position) { AlertDialog.Builder builder = new AlertDialog.Builder(this); builder.setTitle(items[position]); builder.setView(view); builder.setPositiveButton("OK", new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int whichButton) { switch (position) { case 0: values[position] = editTextName.getText().toString(); break; case 1: values[position] = editTextAge.getText().toString(); break; case 2: values[position] = spinnerGender.getSelectedItem().toString(); break; case 3: values[position] = spinnerCountry.getSelectedItem().toString(); break; } Log.d("MainActivity", "Values: " + values[0] + " " + values[1] + " " + values[2] + " " + values[3]); } }); builder.setNegativeButton("Cancel", null); builder.show(); } public void showResult(View view) { AlertDialog.Builder builder = new AlertDialog.Builder(this); builder.setTitle("Personal Information"); builder.setMessage("Name: " + values[0] + "\nAge: " + values[1] + "\nGender: " + values[2] + "\nCountry: " + values[3]); builder.setPositiveButton("OK", null); builder.show(); } } ``` activity_main.xml ```xml <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context="com.example.listview.MainActivit"> <ListView android:id="@+id/listView" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_above="@+id/button" android:layout_alignParentTop="true" android:dividerHeight="1dp" /> <Button android:id="@+id/button" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_alignParentBottom="true" android:text="Show Result" android:onClick="showResult" /> </RelativeLayout> ``` 运行效果: ![image-20210717165105865](https://cdn.jsdelivr.net/gh/Yousazoe/picgo-repo//blog/images/image-20210717165105865.png)

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值