精华内容
下载资源
问答
  • winform给html提供接口

    2011-06-29 23:43:00
    winform提供皮 privatevoidForm1_Load(objectsender,EventArgse){Externalext=newExternal(this);webBrowser1.ObjectForScripting=ext;}}[System....

    winform提供皮

     

     

           private void Form1_Load(object sender, EventArgs e)
            {
                External ext 
    = new External(this);
                webBrowser1.ObjectForScripting 
    = ext;
            }


        }
        [System.Runtime.InteropServices.ComVisibleAttribute(
    true)]
        
    public class External
        {
            Form form;
            
    public External(Form form)
            {
                
    this.form = form;
            }

            
    public void wappFullScreen(bool flag)
            {
                
    if (flag)
                {
                    form.WindowState 
    = FormWindowState.Maximized;
                }
                
    else
                {
                    form.WindowState 
    = FormWindowState.Normal;
                }

            }

        }

     

    脚本可以调用得到

     

     window.external.wappFullScreen(flag); 

    转载于:https://www.cnblogs.com/gateluck/archive/2011/06/29/2093879.html

    展开全文
  • 现在的需求是编写一个客户端应用程序(最好用C#编写),安装在客户端,该应用程序提供... ... 经过尝试,发现似乎只有dll类库才可以对外提供接口,但dll类库没有客户端输入界面,不符合设计需求。不知如何解决以上问题?
  • 我的程序A,现在要实现操作外部程序B /C/ D/ E,外部程序是其他语言的,比如VB VC DELPHI...等等,是否可以写个接口来实现并让外部程序只能通过我的程序才能打开运行它们?求高手给个思路,具体该走哪些步骤。
  • 接口的相关说明接口返回的数据字段如下天行数据主要提供的是数据接口API服务,何为API。简单说,无论做网站、App还是小程序,用户下载安装的都是这个产品的包装结构,如果需要与之产生信息的...

    新的微信主页接口增加了返回文章全文、作者名称、是否原创、公众号ID,文章ID等数据。此外还升级了其他与之相关的其他功能,修复了在天行云服务公众号上无法抓取数据的问题。修复了第三方接口的人脸识别出错的问题。

    接口的相关说明

    944dfe72367c80a11ea935a3ce8466a3.png

    接口返回的数据字段如下

    dcfff2f9b417c0e42d863e48366b9dad.png

    天行数据主要提供的是数据接口API服务,何为API。简单说,无论做网站、App还是小程序,用户下载安装的都是这个产品的包装结构,如果需要与之产生信息的交互,则需要一个叫数据库的东西来配合对用户操作数据的增添删改。但是,光有数据库对于一些应用来说,也是不行的,,你不可能拥有并提前准备好全国IP、手机号码归属地、快递信息等等这些数据。但是类似天行数据之类的平台,就提供了这种庞大的数据服务,只需要在程序的后台向天行数据对应的接口地址(网址URL)发送一个请求(访问接口URL),天行数据就会把你需要的数据立即回复给你,然后你的程序就可以调用这个数据了。

    如图一所示,最简单的API接口调用,只需要通过后台程序向图中的接口地址发送请求,或者直接访问这个地址就能看到图二所示的内容,这就完成了一次API接口调用。当然了,严格来说,以上的说法比较片面,无聊的时候大家也可以百度具体了解下。

    另外可喜的是,天行数据官网和社区支持世界最大的“同性”交友网站GitHub快捷登录了。

    展开全文
  • Winform C#客户端调用接口方法封装

    千次阅读 2019-06-02 14:07:06
    Winform C#客户端调用接口方法封装 编码中,偶尔需要调用其他方提供的API或者其他端交互的API。封装了常用的调用的get请求与post的请求。 接口返回值为Json,复制返回值通过VisualStudio 【编辑】--》【选择性粘贴...

    Winform C#客户端调用接口方法封装

    编码中,偶尔需要调用其他方提供的API或者其他端交互的API。封装了常用的调用的get请求与post的请求。

    接口返回值为Json,复制返回值通过VisualStudio 【编辑】--》【选择性粘贴】--》【将Json粘贴为类】可以自动生成返回结果类,类型可以修改为有意义的,但是字段属性不能修改,要与接口返回一致。通过json序列化,将结果序列化为可用的对象。

    需要引用:

    using Newtonsoft.Json;
    
    using System;
    using System.Collections.Generic;
    using System.Text;
    using Microsoft.Win32;
    using System.Net;
    using System.IO;
    using Newtonsoft.Json;
    using System.Collections.Specialized;
    
    namespace SmartDP.Common.Utils
    {
        public class CallInterfaceDemo
        {
            /// <summary>
            /// Get 请求 返回Json
            /// </summary>
            /// <typeparam name="T"></typeparam>
            /// <param name="url"></param>
            /// <param name="dicParams"></param>
            /// <returns></returns>
            public T GetInterfaceDemo<T>(string url, Dictionary<string,string> dicParams)
            {
                T t1 = default(T);
    
                StringBuilder sbUrl = new StringBuilder();
                string result = "";
                try
                {
                    //拼接访问地址
                    sbUrl.Append(url);
                    //拼接get接口的参数
                    int i = 0;
                    foreach (var key in dicParams.Keys)
                    {
                        if (i == 0)
                        {
                            sbUrl.Append("?" + key+"=").Append(dicParams[key]);
                        }
                        else
                        {
                            sbUrl.Append("&" + key + "=").Append(dicParams[key]);
                        }
                        i++;
                    }
    
                    //网络接口请求
                    HttpWebRequest request = (HttpWebRequest)WebRequest.Create(sbUrl.ToString());
                    request.Method = "GET";
                    request.Accept = "text/html, application/xhtml+xml, */*";
                    HttpWebResponse response = (HttpWebResponse)request.GetResponse();
                    using (StreamReader reader = new StreamReader(response.GetResponseStream()))
                    {
                        result = reader.ReadToEnd();
                    }
    
                    t1 = JsonConvert.DeserializeObject<T>(result);
                  
                    return t1;
                    
    
                }
                catch (Exception ex)
                {
                    return t1;
    
                }
    
            }
            /// <summary>
            /// 调用post的接口 ContentType='multipart/form-data'
            /// </summary>
            /// <param name="url"></param>
            /// <param name="dicParams"></param>
            /// <param name="filepaths"></param>
            /// <returns></returns>
            public string PostDemo(string url, Dictionary<string, string> dicParams, List<string> filepaths)
            {
                string postUrl = url;
                try
                {
                    // 拼接同文件一同上传的表单文本域及值(即传入的参数)
                    NameValueCollection nvc = new NameValueCollection();
                    foreach (var key in dicParams.Keys)
                    {
                        nvc.Add(key, dicParams[key]);
                    }
    
                    StringBuilder sb = new StringBuilder();
                    string boundary = "----------------" + DateTime.Now.Ticks.ToString("x");  // 边界符
    
                    HttpWebRequest httpWebRequest = (HttpWebRequest)WebRequest.Create(url);   // 由于HttpWebRequest没有提供属性来方便传参,所以下面我们只能自己模拟传参
                    httpWebRequest.ContentType = "multipart/form-data; boundary=" + boundary; // 声明数据类型
                    httpWebRequest.Method = "POST";
                    httpWebRequest.KeepAlive = true;
                    httpWebRequest.Credentials = System.Net.CredentialCache.DefaultCredentials;
    
                    Stream memStream = new System.IO.MemoryStream();
    
                    string formdataTemplate = "\r\n--" + boundary + "\r\nContent-Disposition: form-data; name=\"{0}\"\r\n\r\n{1}"; // key就是{0},value是{1}
                    foreach (string key in nvc.Keys)
                    {
                        string formitem = string.Format(formdataTemplate, key, nvc[key]);
                        sb.Append(formitem);
                        byte[] formitembytes = System.Text.Encoding.UTF8.GetBytes(formitem);
                        memStream.Write(formitembytes, 0, formitembytes.Length);
                    }
    
                    // 这里key是{0},value是{1}
                    string headerTemplate = "\r\n--" + boundary + "\r\nContent-Disposition: form-data; name=\"{0}\"; filename=\"{1}\"\r\nContent-Type: application/octet-stream\r\n\r\n";
                    
    
                    // 逐个将文件内容写入流
                    for (int i = 0; i < filepaths.Count; i++)
                    {
                        FileInfo fi = new FileInfo(filepaths[i]);
    
                        // 写入文件开始标记
                        string header = string.Format(headerTemplate, "file", fi.Name);
                        sb.Append(header);
                        byte[] headerbytes = System.Text.Encoding.UTF8.GetBytes(header);
                        memStream.Write(headerbytes, 0, headerbytes.Length);
    
                        FileStream fileStream = new FileStream(fi.FullName, FileMode.Open, FileAccess.Read);
    
                        byte[] buffer = new byte[1024 * 8];//每次上传8M
    
                        int bytesRead = 0;
                        // 写入文件内容
                        while ((bytesRead = fileStream.Read(buffer, 0, buffer.Length)) != 0)
                        {
                            memStream.Write(buffer, 0, bytesRead);
                        }
                        fileStream.Close();
                    }
                    sb.Append("\r\n--" + boundary + "--\r\n");
                    // 将结束标记写入内存流
                    byte[] boundarybytes = System.Text.Encoding.ASCII.GetBytes("\r\n--" + boundary + "--\r\n");
                    memStream.Write(boundarybytes, 0, boundarybytes.Length);
    
                    httpWebRequest.ContentLength = memStream.Length;//流总大小
    
                    Stream requestStream = httpWebRequest.GetRequestStream();
    
                    memStream.Position = 0;
                    byte[] tempBuffer = new byte[memStream.Length];
                    memStream.Read(tempBuffer, 0, tempBuffer.Length);
                    memStream.Close();
                    requestStream.Write(tempBuffer, 0, tempBuffer.Length);
                    requestStream.Close();
    
                    WebResponse webResponse = httpWebRequest.GetResponse();
                    Stream stream = webResponse.GetResponseStream();
                    StreamReader reader = new StreamReader(stream);
                    string ret = reader.ReadToEnd();
    
                    return ret;
                }
                catch (Exception ex)
                {
    
                    return "{\"result\":\"99\",\"message\":\"调用外部接口发生异常(" + ex.Message + ")\",\"data\":null}";
                }
    
            }
    
            
    
        }
    }
    

     

    展开全文
  • 本文拟以一个接近实际的项目...场景与接口定义场景:假设有一个在线商城,需要在Go后台提供存储与查询产品的服务。那么我们在项目中应该怎么设计该服务?ok,需求很明朗,其实就是要一个负责保存和检索产品的存储库。...

    本文拟以一个接近实际的项目需求例子,来帮助读者体会接口使用的重要性,理解Go接口Interface是如何提高项目的鲁棒性和扩展性。

    场景与接口定义

    场景:假设有一个在线商城,需要在Go后台提供存储与查询产品的服务。那么我们在项目中应该怎么设计该服务?

    ok,需求很明朗,其实就是要一个负责保存和检索产品的存储库。

    package productrepo

    type ProductRepository interface {
     StoreProduct(name string, id int)
     FindProductByID(id int)
    }

    为此,我们创建一个productrepo的包和一个api.go的文件。该API应该暴露出存储库里所有的产品方法。在productrepo包下,定义了ProductRepository接口,它代表的就是存储库。该接口中我们只定义两个简单的方法,StoreProduct()方法用于存储产品信息,FindProductByID()方法通过产品ID查找产品信息。

    接口实现示例

    既然已经定义了存储库接口,那么现在就需要有实体对象去实现该接口。

    package productrepo

    import "fmt"

    type mockProductRepo struct {

    }

    func (m mockProductRepo) StoreProduct(name string, id int) {
     fmt.Println("mocking the StoreProduct func")
    }

    func (m mockProductRepo) FindProductByID(id int) {
     fmt.Println("mocking the FindProductByID func")
    }

    如上,在productrepo包下,新建mock.go文件,定义了mockProductRepo对象。正如名字一样,在示例代码中我们并不会真的去做什么(仅仅做个输出打印),但是会mock出ProductRepository接口所需的方法。

    这时,在api.go文件中增加一个方法New(),它返回的一个实现了ProductRepository接口的对象。

    func New() ProductRepository {
     return mockProductRepo{}
    }

    为什么要使用接口?

    对于我们已经定义的ProductRepository接口,可以有多种对象去实现它。但是,在最开始做开发时,小菜刀对于接口总是会很疑惑:为什么要搞个接口,我就一个存储库啊(例如本地MySQL存储),何必要这麻烦!

    这种想法,对于小型的个人项目来说可能是正确的。但是,事情往往不是这么简单。在复杂的实际应用项目中,我们通常会有很多种存储对象:例如,你可能选择使用本地MySQL存储,也可能连接到云数据库(例如阿里云、谷歌云和腾讯云等)存储。而它们均需要实现ProductRepository接口定义的StoreProduct()方法和FindProductByID()方法。

    以本地MySQL存储库为例,它要管理产品对象,需要实现ProductRepository接口。

    package productrepo

    import "fmt"

    type mysqlProductRepo struct {
    }

    func (m mysqlProductRepo) StoreProduct(name string, id int) {
     fmt.Println("mysqlProductRepo: mocking the StoreProduct func")
     // In a real world project you would query a MySQL database here.
    }

    func (m mysqlProductRepo) FindProductByID(id int) {
     fmt.Println("mysqlProductRepo: mocking the FindProductByID func")
     // In a real world project you would query a MySQL database here.
    }

    如上,在productrepo包下,新建mysql.go文件,定义了mysqlProductRepo对象并实现接口方法。

    相似地,当项目中同时需要把产品信息存储到云端时,以阿里云为例,在productrepo包下,新建aliyun.go文件,定义了aliCloudProductRepo对象并实现接口方法。

    package productrepo

    import "fmt"

    type aliCloudProductRepo struct {

    }

    func (m aliCloudProductRepo) StoreProduct(name string, id int) {
     fmt.Println("aliCloudProductRepo: mocking the StoreProduct func")
     // In a real world project you would query an ali Cloud database here.
    }

    func (m aliCloudProductRepo) FindProductByID(id int) {
     fmt.Println("aliCloudProductRepo: mocking the FindProductByID func")
     // In a real world project you would query an ali Cloud database here.
    }

    此时,更新前面提到的api.go中定义的New()方法。

    func New(environment string) ProductRepository {
     switch environment {
     case "aliCloud":
      return aliCloudProductRepo{}
     case "local-mysql":
      return mysqlProductRepo{}
     }

     return mockProductRepo{}
    }

    通过将环境变量environment传递给New()函数,它将基于该环境值返回ProductRepository接口的正确实现对象。

    定义程序入口main.go文件以及main函数。

    package main

    import "workspace/example/example/productrepo"

    func main() {
     env := "aliCloud"
     repo := productrepo.New(env)
     repo.StoreProduct("HuaWei mate 40"105)
    }

    这里,通过使用productrepo.New()方法基于环境值来获取ProductRepository接口对象。如果你需要切换产品存储库,则只需要使用对应的env值调用productrepo.New()方法即可。

    最终,本文的代码结构如下

    .
    ├── go.mod
    ├── main.go
    └── productrepo
        ├── aliyun.go
        ├── api.go
        ├── mock.go
        └── mysql.go

    运行main.go,结果如

    go run main.go
    aliCloudProductRepo: mocking the StoreProduct func

    如果没有接口,要实现上述main函数中的调用,需要增加多少代码?

    // 1. 需要为每个对象增加初始化方法

    • msql.go中增加NewMysqlProductRepo()方法

    func NewMysqlProductRepo() *mysqlProductRepo {
     return &mysqlProductRepo{}
    }
    • aliyun.go中增加NewAliCloudProductRepo()方法

    func NewAliCloudProductRepo()  *aliCloudProductRepo{
     return &aliCloudProductRepo{}
    }
    • mock.go中增加NewMockProductRepo()方法

    func NewMockProductRepo() *mockProductRepo {
     return &mockProductRepo{}
    }

    // 2.  调用对象处产生大量重复代码

    package main

    import "workspace/example/example/productrepo"

    func main() {
     env := "aliCloud"
     switch env {
     case "aliCloud":
      repo := productrepo.NewAliCloudProductRepo()
      repo.StoreProduct("HuaWei mate 40"105)
        // the more function to do, the more code is repeated.
     case "local-mysql":
      repo := productrepo.NewMysqlProductRepo()
      repo.StoreProduct("HuaWei mate 40"105)
        // the more function to do, the more code is repeated.
     default:
      repo := productrepo.NewMockProductRepo()
      repo.StoreProduct("HuaWei mate 40"105)
        // the more function to do, the more code is repeated.
     }
    }

    在项目演进过程中,我们不知道会迭代多少存储库对象,而通过ProductRepository接口,可以轻松地实现扩展,而不必反复编写相同逻辑的代码。

    总结

    开发中,我们常常提到要功能模块化,本文的示例就是一个典型示例:通过接口为载体,一类服务就是一个接口,接口即服务。

    最后,你感受到Go接口赋予应用的高扩展性了吗?


    推荐阅读

    • 探索 Go 中接口的性能

    学习交流 Go 语言,扫码回复「进群」即可

    bcfe97a60e634ab79237e7f2af222720.png

    站长 polarisxu

    自己的原创文章

    不限于 Go 技术

    职场和创业经验

    Go语言中文网

    每天为你

    分享 Go 知识

    Go爱好者值得关注

    489dacb2753f47eb2343b26b01c6a5fc.png

    展开全文
  • 作者:老顾转载请声明出处!...比如:用户查看一个商品详情页,详情页包含了商品基本信息,商品价格,库存信息,评论信息,促销活动信息等,而这些信息是不同的微服务提供的;如:库存服务,促销服务,评...
  • c++服务端,winform客户端,聊天项目接口设计 客户端功能介绍: 一:框架介绍 1)客户端创建socket 并连接服务器(代码在主函数,提供服务器的ip和端口号) 2)连接成功后弹出登陆界面, 如果未注册:单机注册按钮-&...
  • Winform调用百度地图接口(续1)

    热门讨论 2014-02-08 16:23:36
    上次就一个简单的功能,这次加了两个功能; 1、点击地图获取坐标信息 2、根据提供的坐标信息,查看运动路线 这些功能都是百度地图提供的API,查看一下文档就要可以了
  • 集成了WebAPI的访问,这种访问方式不仅可以实现简便的数据交换,而且可以在多种平台上进行接入,如Winform程序、Web网站、移动端APP等多种接入方式,Web API的处理方式和微信提供接口处理规则类似,也是通过向...
  • 升讯威 .Net WinForm 控件库提供了超过15种 Winform 控件,你可以直接使用本控件库,更可以通过本控件库学到 Winform 控件开发的方法和理念。你可以学习到:如何基于 Control 类重头开始实现一个具备复杂功能的 ...
  • 升讯威 .Net WinForm 控件库提供了超过15种 Winform 控件,你可以直接使用本控件库,更可以通过本控件库学到 Winform 控件开发的方法和理念。 你可以学习到: 如何基于 Control 类重头开始实现一个具备复杂功能的...
  • WinForm弹出框PopUp_YuanFang

    热门讨论 2011-05-31 14:58:02
    WinForm右下角弹出框,封装了五个样式,提供接口
  • 要测试本帖子代码请记得管理员权限运行vs...公司有个旧的项目是winform写的,里面就有这个内嵌的wcf,我还没怎么搞过wpf,大家都说winform太老了,于是乎我就想用wpf内嵌下试试看看能不能成功。 下面是我的surface...
  • 文章目录一、前言二、具体实现1、原理2...Console提供了一个SetOut接口,传入一个TextWriter,即可通过TextWriter重写Write和WriteLine接口,将日志写入我们的日志文件了。 public static void SetOut(TextWriter newOu
  • 一个后台服务,同时提供Socket服务器端角色,也要提供Restful API接口, 还得提供桌面客户端的应用接口服务,想到了WCF服务,用起来也没有问题。这里关注WCF 的 Rest API 支持。 首先建立一个winform程序,Form_Load...
  • C#Winform连接摄像头

    千次阅读 2016-12-23 11:13:19
    如何使用摄像头提供接口进行二次开发
  • 一个简单的webservice 提供数据接口的例子,这个例子里面有两种读取数据的方式,一种是读取access的MDB文件格式,一种是读取数据库的方式。这里提供了MDB文件进行测试。 例子中数据接口提供出来的数据有两种格式,一...
  • 我们需要在界面上展示一个视频。...sdk提供接口是传一个winform的句柄,然后由sdk提供视频流到这个winform上。 然后我现在想把这个视频流推到html上显示。就像平常的视频网站那样。 有什么好的方法或者建议吗?
  • WinFormApp1.zip

    2020-03-28 14:37:04
    ctiViz 提供了一个功能强大的界面到可视化工具包 (VTK)的接口,面向对象的软件系统,包括成千上万的算法,将数据转换成 3D 的交互式环境。 ActiViz,它生成 C# VTK 的包装,使开发人员能够结合 web 和数据库...
  • 想封装套接口,来实现界面元素的拾取,比如提供一个capture方法,当用户调用后,把方法阻塞,并进行鼠标,操作,等点击完元素后,把点击的元素返回给接口,除了用form.showdialog进行阻塞,还有其他办法吗?...
  • 1.首先将引用添加到项目中,可以放在BLL层也可以放在UI层。 2.在UI层或配置文件中设置链接URL或者配置数据库中动态... /// 与BS数据交换的接口 /// public static class DataTransfer { static DataTransfe
  • winform 甘特图实例

    热门讨论 2010-05-19 16:48:31
    1.PMGTLT_CUSTOM类型的时间轴更改为...2.PMDisplay接口增加绘制字符串、矩形、路径等功能 3.颜色、字体等对象的暴露实现高级绘制 4.Gantt增加OnPostDrawNodeSprite,提供精灵绘制完毕后的附加图形信息绘制事件 5.C#示例
  • RDIFramework.NET框架V2.8以下版本不包含工作流程组件,在实际使用过程中,很多客户提出了让我们在框架中提供对工作流程的想法,终于经过...与现有系统的整合,我们的流程引擎提供了丰富的功能接口,供三方业务系统调用
  • winform调用webservice 手机号码所在地查询,应用了webxml网站所提供的webservice接口,源代码+安装程序。 请勿用于商业用途。
  • 何喜同学一直在尝试在SAP PO上调通一个RESTFUL接口,我觉得我可以给他提供一个...还是同原来搭建一个WebService接口环境(SAP PO 开发 二)中一样的思路,我喜欢用WINFORM桌面程序来存放REST服务,不需要去架设web服...
  • 引用程序集提供程序接口公开服务器端 UI 自动化提供程序从 UI 自动化提供程序返回属性从 UI 自动化提供程序中引发事件在 UI 自动化提供程序中支持控件模式WinForm Sample参考 引用程序集[1] 返回 UI 自动化提供...

空空如也

空空如也

1 2 3 4 5 ... 11
收藏数 214
精华内容 85
关键字:

winform提供接口