电脑上的APP 从零开始 WinForm

  最近有个 pad 上的 APP 开发,听到 APP 这个词,然后就把它安排给我做了,可是那个 pad 装的是Windows系统,我是 Android 开发啊。

  无奈的我只能搞呗。以下不是专业的教程,只是自己学习的记录。不适合系统学习,适合快速上手。(以下内容也是百度的结果,如有错误,敬请指正)

  

一、我用什么IDE建什么样的项目?

  IDE:Visual Studio (我用的是2019的)

  项目:Windows 窗体应用(.Net Framwork)

  

  

 

 二、如何画界面,添加控件?

  ①打开From1,处于设计模式,左边会有个工具栏。展开所有 Windows 窗体,下面有控件。

  

  ②没有工具箱,找到菜单栏   视图  >> 工具箱。

  

 

三、textview 显示文本的控件 Label 的使用,如何设置控件的属性?

  将控件拖到窗口中,右击属性,在右边可以看到对应的属性,点击属性下方会有属性说明,下方包括显示文本,背景,控件名称,显示位置等基本设置,可以进行拖动排放位置

  

   

   

 

四、editText 输入框采用什么控件? TextBox 

  密码输入框,输入内容显示 *(如何想要显示 其他样式,可以自行设置)

>效果

 

五、如何设置点击事件? Button 

  ⭐打开属性,切换到闪电,下方有很多事件,找到Click 双击后面,自动生成点击事件并跳转到click方法

  

  

 

六、imageview对应的显示图标控件? PictureBox 

  图标的显示模式,是否缩放,适应控件。

 

 

 

 

 

 

七、登录成功如何跳转页面?

  新建Form2:右击》》添加》》新建项》》窗体

  找到按钮的对应的点击事件

    private void button1_Click(object sender, EventArgs e)
    {
        Form2 form2 = new Form2();
        form2.Show();
    }

  评论补充:花落心语

  

 

 八、如何关闭当前窗口?

this.Close();

 

 九、有多个窗口,如何设置应用主入口

  

 

十、如何像sharepreferences一样保存本地数据(保存用户名和密码)

  ①在App.config中添加 

  <appSettings>
    <add key="userName" value="admin"/>
    <add key="userPwd" value="1"/>
  </appSettings>

  

 

   ②读取存储的值和修改存储的值公共方法(可以发到工具类中)

 /// <summary>
        /// 更新设置
        /// </summary>
        /// <param name="settingName"></param>
        /// <param name="valueName"></param>
        public static void UpdateSettingString(string settingName, string valueName)
        {
            Configuration config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);

            if (ConfigurationManager.AppSettings[settingName] != null)
            {
                config.AppSettings.Settings.Remove(settingName);
            }
            config.AppSettings.Settings.Add(settingName, valueName);
            config.Save(ConfigurationSaveMode.Modified);
            ConfigurationManager.RefreshSection("appSettings");
        }

        /// <summary>
        /// 读取设置
        /// </summary>
        /// <param name="settingName"></param>
        /// <returns></returns>
        public static string GetSettingString(string settingName)
        {
            try
            {
                string settingString = ConfigurationManager.AppSettings[settingName].ToString();
                return settingString;
            }
            catch (Exception)
            {
                return null;
            }
        }

 

  🌂调用方法读取修改

//读取用户名
GetSettingString("userName") 
//修改用户名
UpdateSettingString("userName", {{新的用户名}});

 

十一、如何设置窗口全屏显示?(把这个代码放在页面加载的方法中)

  this.FormBorderStyle = FormBorderStyle.None;
  this.WindowState = FormWindowState.Maximized;

 

十二、如何把做的效果在别的电脑上显示?(这里可能是调试)

  在文件资源管理器中打开文件夹,找到 bin 文件找到 debug,将真个debug文件夹拷贝到其他电脑上,debug里面有一个 .exe 文件,运行就这个文件就能看到效果

  

   

    

   

 

十三、如何让控件横向充满屏幕 (match_prarent)

  ①正常设计时,你以为这样就占满了吗

  

  ②实际上效果  

 

   🌂解决方法(将Anchor属性的设置为 Top ,Left,Right)

 

 

   ④最后效果

 

十四、可以看到全屏之后原先登录退出,输入框按钮放在中间位置也不在中间位置了,那么如何将控件显示到屏幕中间?

  由于这里有多个控件,我们引入一个 panel 的控件,🐖这里要将其他控件拖动到这个 panel 控件中,如果选中 panel拖动是,其他控件跟着拖动就代表

 

控件在panel 的内部,再将panel Anchor属性设置为 None,点击黑色的方块可以去掉,这样很大的屏幕也会显示在屏幕中间。可以直接选中所有控件进行设置Anchor 为 None

  

 

 

 

 

十五、如何进行网络请求?HttpClient

  写一个网络请求的帮助类

class HttpHelper
    {
        //TCP/IP 3次握手
        //第1个参数是请求类型,第2个参数是API方法名,第3个参数是传送的对象
        public static string GetAPIData(string requestType, string actionname, Dictionary<string, string> obj = null)
        {
            //实例化HttpClient
            HttpClient hc = new HttpClient();


            //设置API地址
            hc.BaseAddress = new Uri("http://"+ShareUtils.getNetIp()+":"+ShareUtils.getNetPort()+"/api/default/");
            //创建一个任务获取服务端返回的结果;
            Task<HttpResponseMessage> task = null;
            //第1次握手发送请求
            HttpContent httpContent = new StringContent(JsonConvert.SerializeObject(obj));

            httpContent.Headers.ContentType = new MediaTypeHeaderValue("application/json");

            switch (requestType)
            {
                case "get":
                    task = hc.GetAsync(actionname);
                    break;
                case "post":
                    task = hc.PostAsync(actionname, httpContent);

                    break;
                case "put":
                    task = hc.PostAsync(actionname, new FormUrlEncodedContent(obj));
                    break;
                case "delete":
                    task = hc.DeleteAsync(actionname);
                    break;
            }
            task.Wait();
            //第2次握手 接收数据
            if (task != null)
            {
                //第3次握手 检查数据包
                if (task.Result.IsSuccessStatusCode)
                {
                    //把XML转换为字符串
                    var strtask = task.Result.Content.ReadAsStringAsync();
                    strtask.Wait();
                    //转换结果
                    return strtask.Result;
                }
            }
            return "";
        }
    }

⭐这里也是网上找的,然后修改了一下,请求类型不同,写法上应该有点区别 这里是 content_type 为 application/json ,如果content-type为form表单提交可以直接使用  FormUrlEncodedContent 

 

十六、输入框获取焦点?

editText.Focus();

 

十七、【未解决问题】一个APP但是多个窗体共存

  🐖虽然是一个APP但是每一个窗体他们的宿主都是Windows,导致两个窗体可以平行显示,这个在手机APP我们就不会遇到,如果在开启其他Form 把其他Form 给关闭,但 主入口窗体一旦关闭,所有窗体就都退出来了,目前还未解决。

下方来自大佬的评论解答:花落心语

  

 

 

十八、【遇到的尴尬】遮挡在其他应用上方

  我把APP显示设置成全屏显示,同时在应用运行时其他应用的显示层都在APP的下方导致看不到,此时我刚好在调试状态,导致我无法调用IDE的显示界面,让断点过去,同时我的APP在进入了断点,就无法操作状态。任务管理器也被遮挡。最终重启了电脑。⚡

 

十九、下拉框如何绑定数据  ComboBox

 

 

 comboBox.DataSource = jarray; //数组
 comboBox.ValueMember = "code"; //value值
 comboBox.DisplayMember = "code"; //显示值

 

 

 

二十、表格绑定数据如何只绑定设置的列数据 DataGrid

 dataGridView.AutoGenerateColumns = false; //设置是否根据数据自动填充列,默认为true,将根据数据自动填充列数据
 dataGridView.DataSource = jarray;//数组数据

 表格如果关闭编辑模式

 

 点击dataGrid 点击右侧小箭头

 

posted @ 2020-04-15 16:50  茄子鱼  阅读(539)  评论(9编辑  收藏