删除MetroTiles时,MetroPanel滚动位置不会重置

时间:2017-11-11 17:06:24

标签: c# asp.net winforms

更新 我没有提到我也在使用MetroTabControl,因为我认为它不相关。但是,我做了一些测试,下面是我的结果。我也会发布这个作为我自己问题的答案。

  1. 导致问题的MetroPanel位于与更新问题的按钮不同的标签上
  2. 我在与违规按钮和中提琴相同的标签上放置了不同的MetroPanel,此面板工作得很好。我继续删除原始MetroPanel并在单独的标签页上重新创建它。这似乎解决了这个问题。我不知道怎么做,但确实如此。

    原文:
    情况就是这样:

      Dennis Magno的
    1. MetroModernUI包,v1.4.0安装在 溶液
    2. MetroPanelMetroForm上,AutoScroll设置为true以处理水平 瓦片
    3. MetroTiles是在运行时基于给定配置创建的
    4. 更改配置后,将卸载并重新加载所有磁贴
    5. 注意:我并不担心每次卸载和重新加载所有磁贴的性能影响。我预计一次不需要超过10个。

      问题: 当水平滚动条一直定位到面板右侧时,MetroTile被移除并且不会重置。这导致滚动位置在实际可滚动区域之外,我可以说。这会导致闪烁,我的MetroTiles实际上并未显示。我已经尝试了所有我能想到的相关滚动属性,但我不知所措。您可以在以下代码段中看到我使用AutoScrollPositionHorizontalScroll.Value尝试重置它,但它不会重置。

      示例: 这是发生了什么的GIF: https://gyazo.com/362b83abae795f728675a3c11fcf6a29

      代码:

      public void LoadTiles(MetroPanel panel)
      {
          foreach (Feed feed in Feeds.GetFeedsFromConfig())
          {
              var tile = CreateTile(feed);
              AddTile(panel, tile);
          }
      
      }
      public void UnloadTiles(MetroPanel panel)
      {
      
          var tiles = panel.Controls.OfType<MetroTile>().ToArray();
          for(var i = tiles.Count()-1; i>=0; i--)
          {
              panel.Controls.Remove(tiles[i]);
              tiles[i].Dispose();
          }
          panel.AutoScrollPosition = new Point(0, 0);
          panel.HorizontalScroll.Value = 0;
      }
      public void AddTile(MetroPanel panel, MetroTile tile)
      {
          var numTiles = panel.Controls.OfType<MetroTile>().Count();
          tile.Location = new Point(numTiles * 155, 0);
          panel.Controls.Add(tile);
      }
      public MetroTile CreateTile(Feed feed)
      {
          MetroTile tile = new MetroTile();
          tile.Text = feed.Name;
          tile.Style = MetroColorStyle.Purple;
          tile.TileTextFontSize = MetroTileTextSize.Tall;
          tile.UseStyleColors = true;
          tile.Theme = MetroThemeStyle.Dark;
          tile.Tag = feed;
          tile.Click += new EventHandler(LoadFeedInBrowser);
          tile.Size = new Size(150, 100);
          return tile;
      }
      

1 个答案:

答案 0 :(得分:0)

我没有提到我也在使用MetroTabControl,因为我认为它不相关。但是,我做了一些测试,下面是我的结果。我也会发布这个作为我自己问题的答案。

  1. 导致问题的MetroPanel位于与更新问题的按钮不同的标签上
  2. 我在与违规按钮和中提琴相同的标签上放置了不同的MetroPanel,此面板工作得很好。我继续删除原始MetroPanel并在单独的标签页上重新创建它。这似乎解决了这个问题。我不知道怎么做,但确实如此。我唯一的猜测是,我以某种方式搞砸了原始MetroPanel

    的属性