整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:

WinForms DateTimePicker控件使用指南

WinForms中,DateTimePicker 控件用于让用户选择日期和时间。以下是如何使用 DateTimePicker 控件的一些基本信息和示例代码:

创建和设置 DateTimePicker 控件

  1. 添加 DateTimePicker 控件:在 Visual Studio 的工具箱中找到 DateTimePicker 控件,并将其拖放到窗体上。
  2. 设置 Value 属性:您可以通过设置 DateTimePicker 的 Value 属性来指定一个默认的日期和时间。
datetimePicker1.Value = DateTime.Now;
  1. 格式化显示的日期和时间:您可以通过设置 Format 属性来控制显示的日期和时间格式。
datetimePicker1.Format = DateTimePickerFormat.Short;
  1. 启用时间选择:通过设置 ShowUpDown 属性为 true,用户可以使用上下箭头来选择时间。
datetimePicker1.ShowUpDown = true;

事件处理

  • ValueChanged 事件:当用户选择的日期和时间发生变化时,会触发此事件。
  • CloseUp 事件:当用户关闭 DateTimePicker 控件时,会触发此事件。

示例代码

以下是一个简单的示例,演示如何在窗体加载时设置 DateTimePicker 控件的一些基本属性,并处理 ValueChanged 事件:

public partial class MainForm : Form
{
    public MainForm()
    {
        InitializeComponent();

        // 设置 DateTimePicker 的默认值为当前日期和时间
        datetimePicker1.Value = DateTime.Now;

        // 设置日期格式为短格式(例如,"MM/dd/yyyy")
        datetimePicker1.Format = DateTimePickerFormat.Short;

        // 启用时间选择
        datetimePicker1.ShowUpDown = true;

        // 添加 ValueChanged 事件处理程序
        datetimePicker1.ValueChanged += new EventHandler(datetimePicker1_ValueChanged);
    }

    private void datetimePicker1_ValueChanged(object sender, EventArgs e)
    {
        // 当用户选择的日期和时间发生变化时,执行此方法
        DateTime selectedDate = datetimePicker1.Value;
        // 在这里添加您的代码,例如更新 UI 或记录日志
    }
}

在这个示例中,我们首先设置了 DateTimePicker 控件的默认值、日期格式和时间选择的启用状态。然后,我们为 ValueChanged 事件添加了一个处理程序,当用户选择的日期和时间发生变化时,该处理程序会被调用。在处理程序中,您可以根据需要执行任何逻辑,例如更新 UI 或将选定的日期和时间存储到变量中。

通过这些基本步骤,您可以在 WinForms 应用程序中轻松地使用 DateTimePicker 控件来让用户选择日期和时间。

码科技旗下 UIBak 于 2024 年 3 月 5 日正式上线!

关于产品定位

这是一个基于 TailwindCss 框架的模板组件库,为 Web 前端开发人员的 UI Kit 工具箱,完全免费开放,复制即用。同时,UIBak 也是配合创建一个基于Tailwind + Baklib CMS 的 UI 组件超市,方便制作Baklib CMS的用户可以通过超市库便捷寻找到各种可视化Web展示,以创建丰富的Web应用。

这里有两个初心:

  • 一是为我们公司自研的数字内容体验云平台 Baklib 的低代码编辑器提供生态支持;
  • 一是维护一个公共免费的 Web UI 库站点,为 TailwindCss 生态的中文环境添砖加瓦。

这里提到了“生态”,这是一个比较大的词,我想解释一下。

其实在准备上线UIBak网站的时候,我一直在思考“生态”这个问题。你如何理解“生态”这个事情呢? 我目前的理解是:

  1. 国外SaaS的核心能力不是生态,是连接。 也就说我做好一个核心场景,其他场景都通过API去连接,通过连接,帮助企业打造完整的数字化体验。 所以国外的SaaS非常注重开放API用于连接。
  2. 国内的云平台、SaaS、软件厂商都不具备“开放API连接”的思维和条件,最多可成为“集成商”,通过合作寻找上下游打包形成一套解决方案。
  3. 对于”生态”的理解,我认为可以分解为:业务生态和技术生态。 技术生态有如Rails,当公司采用Rails以后, 就会围绕Rails寻找他上下游的各种技术,形成社区,圈子。业务生态有如Notion, 大家通过Notion这个“工具”,打造各种业务比如做成CRM,做成OA,做成可视化平台,做成简历, 各种模板超市、应用超市,形成一个大市场。
  4. Baklib 现有的客户画像主要是互联网软件公司的技术部门和运营部门, 针对这个画像,我认为Baklib更适合打造一个技术生态, 围绕“内容在Web上的各种输出表达”,提供Web内容表达的技术生态,比如CMS、Blog、FAQ、Guide、Wiki这是表达,Card, Grid, List, Alert, Tooltip这也是表达。

UI库发展思路有两个先:先满足自己,再满足别人;先满足别人,再满足自己。如果先满足自己,品牌化会很强,生态的发展速度会取决于我们。如果先满足别人,生态可能会发展更快,会推动 Baklib 的发展,到这种当时,没有一个硬IP背书,非常难以让人跟随。所以对比下来,UI库先面向我们Baklib去驱动发展。这就需要我们给Baklib的所有产品线设计一个业务模型,产品之间需要有关联性,相辅相成。

虽然我们说做个生态,但是生态的范围得收敛到我们能够支撑的范围。目前,为企业设计完整业务流程,是生态边界参考的重要依据。

关于产品设计

相比于其他 Web CSS 框架(如 Bootstrap),TailwindCss 非常吸引人的地方就是其预设了足够用的 class, 需要什么样的样式,只需要查字典而不需要自定义 class,这个“约定大于配置”的理念,非常契合 Ruby on Rails 框架的理念[见 Rails Doctrine],而 Baklib 是基于 Ruby on Rails 开发的,所以我们认为 TailwindCss 是作为协同低代码开发环境最优的选择。网上搜索有关“Tailwind UI ”,“Tailwind Templates”得到的结果:

TailwindUI, Flowbite, DaisyUI, Tailbits, WindUI, PrelineUI, TailGrids, XtendUI, VueTailwind, Best of Tailwind,UI Kit vs Component Library, My library / kit is not on this list, Tailwind UI, daisyUI, Mamba UI, Headless UI, Tailwind Elements, Xtend UI, Flowbite, Tailwind UI Kit, Meraki UI, Tailblocks, HyperUI, Kimia UI, Tailwind Starter Kit, Material Tailwind, Konsta UI, Preline

确定关键词: theme/css-bak/lib, UI, Templates, components, Kits,于是通过这些关键词查了一下域名,发现几乎都被注册了,以下是.com/.cn 域名中还可以被注册的:

bak-ui.com, bak-lib.com, UIBak.com,Libkit.cn,kitbak.cn,bakit.cn,bakkit.cn,uibase.cn,kitbase.cn,Libase.cn,Libbase.cn,bakbase.cn 

最终选定了 UIBak.com/cn,主要是因为还有.com 域名,考虑到未来国际化的需要。

网上也有相关的竞品学习和参考:

  • TailwindCss: Rapidly build modern websites without ever leaving your HTML.
  • Tailwind UI - Official Tailwind CSS Components & Templates
  • Tailwind CSS component library - Flowbite
  • daisyUI — Tailwind CSS Components
  • Tailwind Component Library | Tailbits
  • Tailwind CSS Component Library | WindUI
  • Preline UI - Tailwind CSS component library
  • TailGrids: Tailwind UI Component Library, Kit and Templates
  • Tailwind CSS: 15 Component Libraries & UI Kits - Stack Diary
  • Xtend UI - Xtend UI is a powerful frontend library of Tailwind
  • VueTailwind - Customizable Vue Components for TailwindCSS
  • 58+ Tailwind CSS UI Libraries, Components & Templates - BestofTailwind

网站预览

UIBak.com 是基于 Baklib CMS 搭建的,搭建的速度很快,也是通过模板,大概花费了我三天的时间,内容覆盖各种UI、组件、整页模板,配套一个帮助中心,一个博客,以及 Tools 工具箱。效果预览如下:

官网

代码预览

工具箱

在我们使用selenium进行自动化测试的时候,selenium能够帮助我们实现元素定位和点击输入等操作,但是有的时候,我们会发现,即使我们的元素定位没有问题,元素也无法执行操作;也有部分情况是我们无法直接定位滚动条河时间控件来进行操作,这个时候,我们就需要借助JavaScript来解决问题。本文就来给大家介绍一下selenium如何执行JavaScript脚本,以及这种方法的一些常见应用场景和最佳实践。

Selenium中调用js

在Selenium中主要使用以下函数来调用js:

pythonexecute_script(script, *args)
  • 说明:在当前窗口/框架中同步执行JavaScript。
  • 参数:
    • script:被执行的js脚本
    • *args:被执行的js脚本中使用的参数
  • 使用方法:
    • driver.execute_script('return document.title;')
    • 注意: js脚本中return document.title;中使用return可以获取js脚本返回的结果
  • 源码:
python    def execute_script(self, script, *args):
        converted_args = list(args)
        command = None
        if self.w3c:
            command = Command.W3C_EXECUTE_SCRIPT
        else:
            command = Command.EXECUTE_SCRIPT

        return self.execute(command, {
            'script': script,
            'args': converted_args})['value']

使用js完成滑动操作

当页面显示的数据较多,需要点击底部的对象时,需要把鼠标移动到底部,才可以点击对象。

场景说明:

当我们在百度上搜索一个内容时,内容较多,我们想查看完整的页面需要滑动到页面底部。代码如下:

python
import time
from selenium import webdriver


class TestJs:
    def setup(self):
        self.driver=webdriver.Chrome()
        self.driver.maximize_window()
        self.driver.implicitly_wait(5)

    def teardown(self):
        self.driver.quit()

    def test_js_scroll(self):
        self.driver.get("https://www.baidu.com/")
        # 定位搜索框,传入搜索内容
        self.driver.find_element_by_id("kw").send_keys("selenium")
        # 使用JS定位搜索按钮,点击搜索
        ele_search = self.driver.execute_script('return document.getElementById("su")')
        ele_search.click()
        # 将搜索页面滑动至最下方
        self.driver.execute_script('document.documentElement.scrollTop=10000')
        time.sleep(3)
        # 点击下一页
        self.driver.find_element_by_xpath('//*[@id="page"]/div/a[10]').click()
        time.sleep(3)
        #打印js脚本执行后的返回结果
            #返回页面标题
        print(self.driver.execute_script('return document.title'))
             #返回performance.timing
        print(self.driver.execute_script('return JSON.stringify(performance.timing)'))

使用js操作时间控件

大部分时间空间都是readonly属性,需要手动去选择对应的时间,手工测试中很容易做到,自动化中对控件的操作可以使用js完成,我们需要先移除readonly属性,再给value赋值,具体代码如下:

pythonClass TestJs:
    def setup(self):
        self.driver=webdriver.Chrome()
        self.driver.maximize_window()
        self.driver.implicitly_wait(5)

    def teardown(self):
        self.driver.quit()
        
    def test_js_datetime(self):
        # 打开网址
        self.driver.get('https://www.12306.cn/')
        time.sleep(3)
        # 定位时间元素;进行readonly属性去除操作;赋值新日期
        # 注意:可以合并执行JS方法的写法
        self.driver.execute_script(
            'a=document.getElementById("train_date");a.removeAttribute("readonly");a.value="2024-3-20"')
        time.sleep(3)

总结

通过使用Selenium执行JavaScript脚本,我们可以更灵活地操作根级别文档和时间控件,提高了测试的效率和准确性。在实际应用中,开发者可以根据具体需求,灵活运用JavaScript脚本来优化自动化测试和网页操作,从而更好地满足项目需求。