Web ブラウザーの前後のナビゲーションの方法を作成しました。目的は、訪問したサイト (url) を webHistory というリストに保存することです。次に、前後のナビゲーションのためにこの文字列をループしようとします。しかし、それはうまくいかないようです。リストが作成されていることを確認しました。これが私のコードです。
私の Web ブラウザ クラス
public partial class WebBrowser : Form
{
public string url;
public string addressText;
private homeForm homeForm;
private List <string> urlList = new List <string> ();
List<String> webHistory;
int webHistory_Index;
bool checkHistory;
public WebBrowser()
{
InitializeComponent();
webHistory = new List<String>();
webHistory_Index = 0;
checkHistory = false;
}
戻るボタン私が現在テストしているもの
private void backButton_Click(object sender, EventArgs e)
{
String backPage = webHistory.ElementAt(webHistory.Count-1);
webNavigate(backPage);
}
ボタンのナビゲーション方法
private void updateNavigation()
{
if (webHistory_Index == 0)
{
this.backButton.Enabled = false;
}
else
{
this.backButton.Enabled = true;
}
if (webHistory_Index < webHistory.Count)
{
this.forwardButton.Enabled = true;
}
else
{
this.forwardButton.Enabled = false;
}
}
private void navigatedPages(string urlbartext)
{
addressText = urlBar.Text;
urlbartext = "http://" + addressText;
webHistory.Add(urlbartext);
if (!checkHistory)
{
if (webHistory_Index < webHistory.Count)
{
webHistory.RemoveRange(webHistory_Index, webHistory.Count - webHistory_Index);
}
System.Diagnostics.Debug.Print(urlbartext + " - " + urlBar.SelectedText);
webHistory_Index += 1;
updateNavigation();
}
checkHistory = false;
System.Console.WriteLine(webHistory.Count.ToString());
}
Web Browser Navigate メソッド。
private void webNavigate(string urlbartext )
{
addressText = urlBar.Text;
urlbartext = "http://" + addressText;
urlList.Add(urlbartext);
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(urlbartext);
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
Stream pageStream = response.GetResponseStream();
StreamReader reader = new StreamReader(pageStream, Encoding.Default);
string s = reader.ReadToEnd();
webDisplay.Text = s;
reader.Dispose();
pageStream.Dispose();
response.Close();
}
戻るボタンをクリックすると、現在のページがまだ表示され、エラーは発生しません。どこが間違っているのでしょうか?
テスト編集
List<String> webHistory;
int curIndex = -1;
public Form1()
{
InitializeComponent();
webHistory = new List<string>();
}
private void gotoUrl(string curUrl)
{
curUrl = "http://" + curUrl;
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(curUrl);
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
Stream pageStream = response.GetResponseStream();
StreamReader reader = new StreamReader(pageStream, Encoding.Default);
string s = reader.ReadToEnd();
webDisplay.Text = s;
reader.Dispose();
pageStream.Dispose();
response.Close();
}
private void addUrl(string curUrl)
{
if (webHistory.Count > 0 && webHistory.Count - 1 > curIndex) webHistory.RemoveRange(curIndex, webHistory.Count - curIndex - 1);
webHistory.Add(curUrl);
curIndex = webHistory.Count - 1;
gotoUrl(curUrl);
}
private void back_Click(object sender, EventArgs e)
{
if (curIndex - 1 >= 0)
{
curIndex = curIndex - 1;
gotoUrl(webHistory[curIndex]);
}
}
private void forward_Click(object sender, EventArgs e)
{
if (curIndex + 1 <= webHistory.Count - 1)
{
curIndex = curIndex + 1;
gotoUrl(webHistory[curIndex]);
}
}
private void navigate_Click(object sender, EventArgs e)
{
addUrl(urlText.Text);
}