Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 我如何表示像谷歌日历这样的一系列事件?_C#_.net_List_Calendar_Components - Fatal编程技术网

C# 我如何表示像谷歌日历这样的一系列事件?

C# 我如何表示像谷歌日历这样的一系列事件?,c#,.net,list,calendar,components,C#,.net,List,Calendar,Components,我需要能够在垂直时间线上绘制事件,我喜欢Google Calendar实现这一点的方式: 目前,我使用ListView组件显示信息,但这有两个实际缺点: 有缺口的时候就不清楚了 或者,相反,当存在重叠时 这两个问题都源于缺乏事件长度的表示。这是我想纠正的首要问题 是否有一个组件可以帮助我做到这一点?另外,有没有人对我应该如何从头开始有什么建议 我正在使用C#和winforms。我的第一个想法是A)尝试使用Microsoft图表来实现这一点,或者B)创建一个自定义控件,为每个事件绘制矩形,并将矩

我需要能够在垂直时间线上绘制事件,我喜欢Google Calendar实现这一点的方式:

目前,我使用ListView组件显示信息,但这有两个实际缺点:

  • 有缺口的时候就不清楚了
  • 或者,相反,当存在重叠时
  • 这两个问题都源于缺乏事件长度的表示。这是我想纠正的首要问题

    是否有一个组件可以帮助我做到这一点?另外,有没有人对我应该如何从头开始有什么建议


    我正在使用C#和winforms。

    我的第一个想法是A)尝试使用Microsoft图表来实现这一点,或者B)创建一个自定义控件,为每个事件绘制矩形,并将矩形放置在适当的时间范围内。

    我有一些代码,可以生成您想要的日视图日历格式的输出。不幸的是,我不能把它给你。但要点如下:

  • 创建一个容器div,将其设置为所需的高度,并将溢出设置为滚动
  • 创建一个内部div,相对定位,设置为50*24像素高度
  • 在其中创建24个div,绝对定位,将高度设置为50,顶部设置为50*i
  • 在24个div中的每个div中,为每个tic标记创建25%、50%、75%和100%的div
  • 要添加事件,请执行以下操作:
    • 将顶部的开始时间、分钟、秒和*设置为50
    • (获取结束小时,分钟,秒-开始小时,分钟,秒)*50表示高度

  • 你可以根据%来做整个事情,但我在x浏览器相关的东西中遇到了取整问题。至于相邻的事件,这是一个“有趣”的算法。

    Tom,如果您准备好支付商业日程安排组件的费用,这里就是一个,同样,市场上还有其他一些可用的

    但是,如果您打算自己开发一个,那么您可能可以定制DataGrid控件,这是我所能想到的最可靠的方法。但是创作一个新的windows窗体控件将花费相当多的时间,这是我们可以预料的


    愉快的编码。

    您可能需要创建一个自定义控件,该控件只具有允许用户调整大小的功能。和一个布局管理器,用于处理调整大小事件和排列自定义控件。您只需确保较小的控件始终位于较大控件的顶部,以便用户有机会调整其大小。

    好吧,我们来谈谈。我有几个这样的控制在我身后,所以也许我可以帮助涉及的问题

  • 确定你想在屏幕上显示的最小时间段是多少,比如说15分钟
  • 将您的查看区域划分为该持续时间的时段-如果您需要显示6小时,请创建一个4x6=24项的列表
  • 每个项目都是其中的明细表对象列表
  • 迭代调度对象,并将其分配给列表
  • 迭代列表并绘制。您应该有足够的信息来显示上述内容

    类调度项 { 日期时间开始; 日期时间结束; 字符串someText; }

    第一类插槽 { 列表ItemsInSlot; }

    列出可见插槽

  • 如果你需要像素精度(这里你真的不需要第二精度,因为你在屏幕上没有及时移动),你可以在这里尽可能地缩小插槽

    8小时是28800秒;如果您将时间段设置为30秒,那么将有960个时间段可用于映射到屏幕


    希望有帮助,如果需要进一步讨论,请评论我。

    我所知道的最好的组件是devexpress调度程序控件:


    另一个商业产品:

    Tom,如果您对jquery感到满意,我在asp.net mvc中使用了一个非常好的jquery。您可以在这里看到它的作用:它允许您从数据库中传递json和/或xml。有趣的是,我今天在这件事上做得太多了@jim,应用程序必须是winforms。我想我可以使用浏览器组件,但这似乎是一种冗长的方式@贝丝,这有什么用?作为记录,我不能指望安装outlook。注意。不知怎的,我把它读作“网络表单”——多希因为我懒惰而悬赏。代码示例是我正在寻找的,或者是组件上的具体线索。上次我不得不这样做时,我只是使用Google Calendar作为我的显示器-我发现他们的界面非常好,我的应用程序只是使用gdata API在用户的新日历上创建新事件,然后用户可以在该界面中拖动并调整大小,在事件上有唯一的标记,可以将它们标识为我的应用程序中的对象。Tony-我一定很懒,我的第一个想法是看看是否已经有了一个商业支持的组件-blush!!:)@吉姆,这没什么错。我只是发现,让这些东西变得普通最终只需要集成/实现第三方东西:PHi Tony。我在这个问题上悬赏了。如果图表是前进的方向,你能具体告诉我我将如何前进吗?谢谢。谢谢你的建议,但我不在浏览器里。我的应用程序是winforms(桌面)应用程序。很抱歉,我在第一次阅读问题时错过了这一点。我想,仅仅使用表单控件而不是web控件,这个概念仍然有效。关于最小插槽的有趣问题。可能是30分钟,但每个项目可能不会以30分钟的间隔开始-开始和结束时间需要精确到最接近的秒。(若要执行代码块,请按四个空格缩进,或对短代码段使用反勾号。)我执行了缩进,但没有帮助。好吧,你真的不想精确到第二秒。。。假设您有8小时的显示时间和1000像素的高度。每个像素有8*60*60/1000秒,对吗?所以,每个