已从中删除标签.控件不断出现

本文关键字:控件 标签 删除 | 更新日期: 2023-09-27 18:01:15

我是C#的新手程序员,试图为SharePoint网站创建一个简单的RSS/Atom聚合器Web部件(我不能使用ootb部件,因为我没有Enterprise许可证(。

我有3个按钮:

  1. New Feed,它从用户那里获取一个URI,并试图构建一个显示提要的标签,并将其添加到this.Controls;
  2. 清除提要,用于清除所有显示的提要(将它们从this.Controls中删除(
  3. Default Feeds,它采用默认URIsArrayList,并将它们分别转换为标签(还将它们添加到this.Controls(

清除提要效果良好,恢复到默认值也是如此。然而,在清除所有提要并尝试添加新提要后,也会添加默认提要(一次只能添加一个新提要,新提要覆盖旧提要(。我怀疑这是因为我不完全理解添加/删除控件的功能。代码如下:

    ArrayList viewedFeeds = new ArrayList(); 
    ArrayList defaultFeeds = new ArrayList(); //Contains several default feeds, e.g. BBC news (http://feeds.bbci.co.uk/news/rss.xml)
    private void newFeed_Click(object sender, EventArgs e)
    {
        renderFeed(userText.Text);
    }
    private void clearFeeds_Click(object sender, EventArgs e)
    {
        clearAllFeeds();
    }
    private void defaultFeeds_Click(object sender, EventArgs e)
    {
        clearAllFeeds();
        initialiseFeedViewer();
    }
    private void clearAllFeeds()
    {
        foreach (Label feed in viewedFeeds)
        {
            this.Controls.Remove(feed);
        }
        viewedFeeds.Clear();
    }
    private void initialiseFeedViewer()
    {
        foreach (string uri in defaultFeeds)
            renderFeed(uri);
    }
    private void renderFeed(String uri)  
    {
        try  
        {  
            Label feed = new Label();
            // Create a Syndicated feed reader, parse the XML and add the relevant text to the label "feed"
            feed.BorderStyle = System.Web.UI.WebControls.BorderStyle.Double;
            viewedFeeds.Add(feed);
            this.Controls.Add(feed);
        }
        catch (Exception ex)
        {   
            //Print an error message (e.g. If the URI does not link to a suitable feed
        }
    }

已从中删除标签.控件不断出现

原来我不止一次调用initialiseFeedViewer()——它在createChildControls()方法中。我假设它只调用过一次,类似于构造函数,但似乎每次加载页面时都会调用它。

这有清除所有变量的恼人副作用,所以我用来跟踪显示的提要的List<Label>s变得毫无用处。

我将尝试通过将它们存储在Sharepoint列表中来解决这个问题。

因为您无法一次添加多个控件。在尝试将标签添加到数组列表和用于保存标签控件的"面板"之前,请尝试设置标签的"名称"属性。

private void renderFeed(String uri)  
{
    try  
    {  
        Label feed = new Label();
        feed.Name = uri;
        //Create a Syndicated feed reader, parse the XML and add the relevant text to the label "feed"
        feed.BorderStyle = System.Web.UI.WebControls.BorderStyle.Double;
        viewedFeeds.Add(uri);
        this.Controls.Add(feed);
    }
    catch (Exception ex)
    {   
        //Print an error message (e.g. If the URI does not link to a suitable feed
    }
}

至于当你添加一个新的默认值时,它会渲染你的默认值。我只想确保你没有在意外情况下调用initializeFeedViewer((。

正如旁注一样,arraylist被认为是贬值的。请考虑改用List。

List<string> viewedFeeds = new List<string>();
List<string> defaultFeeds = new List<string>();